GDB를 사용하여 프로그램을 디버깅하는 동안 디버그 모드에서 프로그램을 중지하는 데 문제가 발생했습니다. 백 트레이스를 수행 할 때 독점적 인 제 3 자 라이브러리 콜 스택 내에서 깊이있는 것을 발견했으며 프로그램이 중단 된 이유를 찾아야합니다. 나는 여전히 GDB 초보자이므로이 작업을 수행하는 방법을 여전히 잘 모르고있다. backtrace에서 나는 "__cxa_throw() from /usr/lib64/libstdc++.so.6"을 알아 차 렸습니다. 그래서 어떤 종류의 예외는 던져 졌다고 추측합니다. 그러나 그것에 대한 자세한 정보를 얻는 방법을 알고 싶습니다. 가능한.gdb가 멈춘 이유는 무엇입니까?
답변
GDB가
을 중지 이유를 알아 어떻게 GDB는 보통 바로, 예를 알려줍니다
Program received signal SIGABRT, Aborted.
0x00007ffff7750425 in __GI_raise (sig=<optimized out>)
신호가 수신 되었기 때문에 프로그램이 중단되었습니다.
독점적 인 써드 파티 라이브러리 호출 스택에 깊이있는 것을 발견했습니다. 왜 프로그램이 멈추는 지 정확히 알아 내기 위해 노력하고 있습니다.
GDB에서 언급 한 이유 때문에 정확히이 중지되었습니다.
내가
__cxa_throw() from /usr/lib64/libstdc++.so.6
그래서 난 어떤 종류의 예외가 발생 된 것으로 추정하고있다하지만 난 그것에 대해 더 많은 정보를 얻을하는 방법을 알고 싶습니다 것으로 나타났습니다 역 추적에서 찾고있다.__cxa_throw
의
존재는 예외가 발생하고있다 (그리고 std::terminate()
의 존재가 잡히지 않은 예외임을 나타냄) 것을 나타 않는다. 타사 라이브러리의 디버그 정보없이
는 원인을 찾는 당신의 선택은 제한됩니다
- 당신은이 라이브러리의 문서를 읽을 수 있습니다 당신이 어떤 전제 조건을 위반하지 않았 음을 더블 체크 그것은 그 필요합니다
__cxa_throw
이라는 루틴을 분해하여 해당 루틴이 호출 된 이유를 정확하게 파악할 수 있습니다.
backtrace
명령을 사용하여 프로그램 상태를 보여줍니다. Here 자세한 내용을 확인할 수 있습니다.
나는 그것을 시험해 보았고 예외가 던져진 곳으로 이끌었다. "왜"에 대한 대답이 가능하지 않지만 여기에 대한 희망이 있다면 나는 놀라지 않을 것입니다. – Brian
hm. 나는 그 문제를 일으킨 원인이 있을지도 모르기 때문에 일반적으로 프레임으로 건너 뛴다. 'list' 명령으로 특정 프레임의 소스 코드를 볼 수 있습니까? 디버깅중인 코드가'-ggdb -DFULLDEBUG -O0' 옵션으로 컴파일되었는지 확인 하시겠습니까? – tmaric
실제로 제 디버거 정보로 빌드하지 않은 제 3 자 라이브러리가 있다고 확신 할 수 있습니다.* 한숨 * – Brian
- 1. UIScrollView가 스크롤을 멈춘 이유는 무엇입니까?
- 2. 윈도우 서비스가 멈춘 이유는 무엇입니까
- 3. PowerShell ISE가이 C# 프로그램에서 멈춘 이유는 무엇입니까?
- 4. isalpha()가 공백에서 멈춘 이유는 무엇입니까?
- 5. GDB가 심볼 파일을 생성하지 않는 이유는 무엇입니까?
- 6. gdb가 홈 디렉토리로 전환 된 이유는 무엇입니까?
- 7. GDB가 중단 점에서 멈추지 않는 이유는 무엇입니까?
- 8. gdb가 치명적인 오류를 출력하는 이유는 무엇입니까?
- 9. gdb가 배열 요소 인쇄에 실패한 이유는 무엇입니까?
- 10. GDB가 배열을 인쇄하지 않는 이유는 무엇입니까?
- 11. java socket에서 protobuf를 사용하여 parseFrom() 함수가 멈춘 이유는 무엇입니까?
- 12. 다른 스레드가 실행될 때 스레드가 멈춘 이유는 무엇입니까?
- 13. 컴파일 된 후 C++ mprogram이 작동을 멈춘 이유는 무엇입니까?
- 14. Vim에서 버퍼가 작동을 멈춘 이유는 무엇입니까? 또는 Vim을 다시로드하는 방법?
- 15. "동시"Go GC 단계가 세계에서 멈춘 이유는 무엇입니까?
- 16. 스레드의 메서드가 반환 된 경우에도 Thread.Join()이 멈춘 이유는 무엇입니까?
- 17. 프로젝트를 가져올 때 FDT 5.5가 멈춘 이유는 무엇입니까?
- 18. gdb가 내 x86-64 프로그램이 i386이라고 생각하는 이유는 무엇입니까?
- 19. GDB가 C++과 다른 부동 소수점 산술을 평가하는 이유는 무엇입니까?
- 20. 원격 파이프 모드에서 OpenOCD를 사용할 때 GDB가 멈추는 이유는 무엇입니까?
- 21. 요청 된 쓰기 후에 gdb가 자동으로 읽기를 수행하는 이유는 무엇입니까?
- 22. gdb가 sqrt (3)을 0으로 평가하는 이유는 무엇입니까?
- 23. gdb가 MethodName과 다른 이유는 무엇입니까? MethodName :: <static var>
- 24. gdb가 sharedlibrady에서 libdl을로드하지 않는 이유는 무엇입니까? 및 heaptrack는
- 25. Vim을 디버깅 할 때 gdb가 소스를 찾지 못하는 이유는 무엇입니까?
- 26. gdb가 보여주는 함수 주소가 nm의 함수 주소와 다른 이유는 무엇입니까?
- 27. MPI 프로그램을 디버깅 할 때 gdb가 앞뒤로 움직이는 이유는 무엇입니까?
- 28. Python에서 멈춘 클라이언트 시뮬레이션
- 29. gdb가 줄을 뛰어 넘다.
- 30. 루프에서 멈춘 곳에서 읽는 방법은 무엇입니까?
gdb "up"명령을 사용하면 호출 스택에서 한 레벨 위로 포커스를 이동할 수 있습니다. 예외가 발생하기 전까지 코드가 존재하는 지점으로 이동하면 그 시점에서 수행 한 작업을 볼 수 있습니다. 잘못된 데이터가 포함 된 함수를 호출하는지 확인하십시오. – mah
나는 그렇게했고 내 코드의 모든 것이 (적어도 그들의 문서에 따르면) 좋게 보인다. – Brian