QT에서 printf 및 Debug로 인한 프로그램 예외에 대한 설명

2117 단어 QT
삽입식 그래픽 인터페이스에서 가장 많이 사용되는 것이 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 프로그램이 이따가 인터페이스가 끊기면.이 가능하다, ~할 수 있다,...


좋은 웹페이지 즐겨찾기