2013-03-24 4 views
6
을 통해 확인합니다.

내 질문에는 소리가 들리지만 여전히 C++ 디버그 문제 일 수 있습니다.실행하면 카운터 종료 코드 139,하지만 gdb는

무선 네트워크를 시뮬레이트하는 omnet ++을 사용하고 있습니다. omnet ++ 자체는 C++ 프로그램입니다.

내 프로그램 (우분투 12.04에서 omnet ++ 4.2.2로 수정 된 inet 프레임 워크)을 실행할 때 괴상한 현상이 발생했습니다. 프로그램의 특정 부분을 만졌을 때 종료 코드 139가있는 프로그램 종료 (사람들은 메모리 조각화를 말합니다) 코드를 디버깅하려고 할 때 gdb는 시뮬레이션이 이전에 종료 된 '문제가있는'코드와 관련하여 잘못된 점을보고하지 않습니다. 실제로 디버그는 코드의이 부분을 통과하여 예상되는 결과를 출력합니다.

GDB 버전 정보 : 실행이 실패하지만 디버그하지 않는 이유는 GNU gdb를 (우분투/리나 7.4-2012.04-0ubuntu2.1는) 7.4-2012.04

는 는

은 아무도 말해 줄 수 있을까요?

감사합니다.

+2

소리가 정의되지 않은 동작입니다. 우리는 문제가되는 코드를 보지 않고는 도울 수 없습니다. –

답변

17

종료 코드 139 (사람들이 메모리 조각화를 의미 말)

아니, 그것은 당신의 프로그램 (리눅스에 SIGSEGV 대부분의 다른 유닉스) 신호 11로 죽었다는 것을 의미하며, 또한 segmentation fault으로 알려져 있습니다.

아무에게도 실행이 실패하지만 디버그가없는 이유를 말해 줄 수 있습니까?

귀하의 프로그램 전시 (즉 때로는 제대로 작동하려면 나타나는 포함) 동작을 정의되지 않은, 그리고 아무것도 할 수 있습니다.

첫 번째 단계는 Valgrind에서이 프로그램을 실행하고보고 한 모든 오류를 수정해야합니다.

위의 작업을 수행 한 후에도 프로그램이 계속 충돌하면 core (ulimit -c unlimited; ./a.out)를 덤프하고 GDB를 사용하여 코어 덤프를 분석해야합니다. gdb ./a.out core; where 명령을 사용하십시오.

+0

빠른 답장을 보내 주셔서 감사합니다. 나는 명령 프롬프트에서 프로그램을 실행하는 방법을 찾고 있는데, 이제는 시뮬레이터로 막혔습니다. 나는 valgrind로 분석 한 후에 다시보고 할 것입니다. – ulyssis2

+0

이제 명령 프롬프트를 통해 프로그램을 실행하고 디버깅 할 수 있습니다. "문제 코드"에 걸친 스트라이드를 실행 한 다음 Eclipse IDE를 다시 사용합니다. 디버그 모드에서 명령 프롬프트를 사용하여 같은 위치에서 중지합니다. 프로그램을 단계별로 실행하면 "문제 코드"를 통해 실행되지만 실행하면 프로그램이 "문제 코드"주위를 ​​무너지게됩니다. GUI 자체도 프로그램이므로 정상적인 실행 모드에서는 제대로 작동하지 않으므로 IDE로 인한 것 같습니다. 나는 이유를 모른다. – ulyssis2

+0

@ ulyssis2 Valgrind는 뭐라고 말합니까? 프로그램이 IDE 외부에서 작동하는 것처럼 보일 수 있지만 Valgrind는 여전히 버그에 관해 알려야합니다. –