QT에서 printf 및 Debug로 인한 프로그램 예외에 대한 설명
2117 단어 QT
printf와 Debug는 여러 번 사용했을 거예요.하지만 QT 인터페이스에서는 조심해서 사용하시고 본론으로 가세요!
나의 개발 환경은 IMX287 개발판이다.통신 제어 프로그램을 개발해야 한다.장시간 운행이 필요하다.그러나 내 프로그램이 8시간 정도 실행되면 인터페이스가 끊겨 죽는 것을 발견했는데 이상하게도 문지기가 복원되지 않았다.당시에는 자신의 절차에 문제가 있다고 생각했다.여러 번 조사했지만 원인을 찾아내지 못했다.나중에 여러 번 테스트를 해 봤는데 제 프로그램의 printf가 일으킨 거예요.
IMX287은 기본적으로 아이콘 시작 프로그램을 가지고 있습니다. 제 프로그램을 아이콘 프로그램으로 만들어서 시작할 때 몇 시간이 지나면 프로그램 인터페이스가 끊깁니다.내가 명령행으로 시작했을 때, 프로그램은 30여 시간을 뛰었지만 여전히 정상적이었다.같은 프로그램, 다른 시작 방식은 서로 다른 결과를 초래한다.유일한 차이점은 내가 프로그램에 추가한 printf 문장이 명령줄로 시작할 때 직렬로 인쇄되었다는 것이다.
아이콘으로 시작할 때 포트가 아무것도 출력되지 않았습니다.아마도 printf가 QT를 통해 시작할 때 표준 출력에 대응하는 것은 LCD일 것입니다. 그러나 printf는 ARM LCD에 직접 출력할 수 없습니다.그래서 printf 인쇄의 내용은 linux 버퍼에 일치하게 주재하고 데이터가 갈수록 많아지면 넘쳐납니다.그리고 프로그램 인터페이스가 끊겨요.하지만 문을 지키는 개는 제자리로 돌아오지 않는다.이 때 직렬은 다음과 같습니다. (아이콘으로 시작하기 전에 직렬로 개발판에 로그인한 경우, 카드가 끊긴 후에 직렬로 로그인하면 다음 인쇄 정보를 출력할 수 없습니다.)
DMA: 66*4kB 0*8kB 1*16kB 1*32kB 2*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 440kB
Normal: 8*4kB 1*8kB 1*16kB 0*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 760kB
289 total pagecache pages
0 pages in swap cache
Swap cache stats: add 0, delete 0, find 0/0
Free swap = 0kB
Total swap = 0kB
16384 pages of RAM
359 free pages
1486 reserved pages
875 slab pages
150 pages shared
0 pages swap cached
Out of memory: kill process 2171 (start_zylaunche) score 795 or a child
Killed process 2193 (framework) vsz:97360kB, anon-rss:49908kB, file-rss:556kB
힌트에 의하면 메모리가 부족하다는 걸 알 수 있잖아요. 게다가 start도 떨어뜨려요zylaunche와 프레임워크 두 프로세스가 끊겼기 때문에 ps 명령을 통해 두 프로세스가 모두 없어진 것을 발견했습니다. (정상적인 상황에서는 있습니다.)
명령줄로 프로그램을 시작할 때 printf가 표준 출력을 통해 직렬로 출력되기 때문에 데이터는 메모리에 저장되지 않습니다.아이콘이 시작되면 데이터를 가져가지 않아 부하가 너무 무거워 붕괴되는 것으로 이해할 수 있다.명령행 시작 데이터는 직렬 출력을 통해 출력됩니다.
나의 추측을 한층 더 검증하기 위해서 나는 복잡한 통신 기능을 모두 없애고 인터페이스 하나와 프린터 라인 하나만 남겼다.아이콘을 통해 시동을 걸면 1, 2분 안에 렉이 걸린다.명령행을 통과하면 정상이다.
이상은 저의 테스트입니다. 저는 IMX287에서 테스트했습니다.다른 플랫폼은 테스트한 적이 없다.
총괄: 만일 당신의 QT 프로그램이 이따가 인터페이스가 끊기면.이 가능하다, ~할 수 있다,...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간편한 채팅 시스템 - 메시지 전달 서버메시지 전송 서버는 메시지 대기열에서 온 데이터를 받아들여 디코딩, 식별 등을 하고 마지막으로 분류를 나눈다.예를 들어 채팅 시스템은 같은 그룹과 같은 세션의 정보를 같은 그룹 서비스로 전송한다(물론 아직 같은 그룹...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.