USB 직렬 링크를 통해 마이크로 프로세서 (Arduino와 유사)에 연결하는 C++ 응용 프로그램이 있습니다. 내 시리얼 래퍼로 termios.h
을 사용합니다.디버거에서 프로세스가 충돌했습니다. 어떻게해야합니까?
Mac OS X 10.7.3
에서 cgdb
을 사용하여 디버깅하고 있습니다.
I 때 :
cgdb build/my-process
- 설정 일부 중단 점, 등, 버그를 찾거나
cgdb
kill
를 사용하여
여전히 실행중인 프로세스를 종료하려고 디버깅
프로세스가 중단됩니다. cgdb
은 프로세스를 죽이는 것을 거부합니다. 단지 거기에 있습니다. 나는 공정하게입니다. 왜냐하면 응용 프로그램의 중간에서 kill
이 나오면 마이크로 컨트롤러를 통해 액세스하는 장치 인 /dev/ttyUSB
장치를 출시하지 않기 때문입니다. 무언가가 잠기고 결코 잠기지 않는다면 확실하지 않지만, cgdb
은 결코 빠져 나올 수 없습니다.
이 나는 시도했다 :
- 기본 인터럽트 : Ctrl 키 + C
ps aux | grep 'my-process',
죽일 -9 [PID]`.ps aux | grep cgdb
,kill -9 [pid]
.sudo
상기 버전.
아무 것도 cgdb
또는 실행중인 프로세스를 죽이지 않습니다.
USB 케이블 (마이크로 프로세서 연결 종료)을 제거하면 (충돌 한 프로세스가 중단 될 수 있다고 생각 했음) 사용할 수있는 CPU가 50 % 가량 사용되기 시작하고 모든 것이 잠기고 있습니다. I 응용 프로그램을 크래시하지 마십시오.
당신이 할 방법 : cgdb
또는 gdb
에서 모든 것을 잠금없이 깨끗하게 의 (a) 종료하는 동안 프로세스를 또는 (b)의 킬/깨끗하게 (비록 '깔끔하게'디버깅의 중간에 단지 것 케이크에 장식) 당신이 그것을 디버깅하는 동안 중지 된 프로세스를 중지 없이 응답을 응답?
내가 나는 철저하게 죽일 수없는 경우, 타임 아웃 또는 유사한를 설정할 수 있습니까? – simont
아니요, 본질적으로 무정전 상태입니다. 상태를 벗어나는 유일한 방법은 커널 I/O 작업을 성공적으로 완료하도록하는 것입니다. – smparkes
그것은 약간의 고통입니다 - 고마워요. 나는 며칠 동안 어리석은 것을 죽이는 법을 알아 내려고 고개를 숙이고 있었다. – simont