2012-06-23 1 views
4

내 자신의 Qt 기반 OpenGL 응용 프로그램을 실행할 때 fglrx dri 라이브러리에서 세그먼테이션 결함이 발생합니다. 역 추적 나는 GDB에서 (DBG의 Qt를 위해 설치 기호와 내 자신의 응용 프로그램과 함께) 얻을 : 내 코드에서 나는 세그먼트 오류를 ​​일으키는 fglrx 드라이버 함수를 호출 할 경우gdb : fglrx_dri.so가 segfaults 일 때 완전한 백 추적을 얻는 방법?

Thread 1 (Thread 0xb7fd9720 (LWP 1809)): 
#0 0x06276705 in ??() from /usr/lib/fglrx/dri/fglrx_dri.so 
#1 0x000020dc in ??() 
#2 0x000020d9 in ??() 
#3 0x00000000 in ??() 

나는 볼 수 없습니다. maint() 함수에서 fglrx dri 라이브러리까지 완전히 보이도록이 백 트레이스를 어떻게 확장 할 수 있습니까?

편집 : 내 자신의 응용 프로그램을 확인하려면 디버그 기호가 내장되어 있습니다 :

Reading symbols from /home/user/fglrx crash/crashtest-build-desktop-Qt_4_8_1__Qt-4_8_1__Debug/crashtest...done. 
(gdb) br main 
Breakpoint 1 at 0x804996d: file ../program/main.cpp, line 21. 
(gdb) run 
Starting program: /home/user/fglrx crash/crashtest-build-desktop-Qt_4_8_1__Qt-4_8_1__Debug/crashtest [Thread debugging using libthread_db enabled] 

Breakpoint 1, main (argc=1, argv=0xbffff2a4) at ../program/main.cpp:21 
21  QApplication a(argc, argv); 
(gdb) bt 
#0 main (argc=1, argv=0xbffff2a4) at ../program/main.cpp:21 
(gdb) n 
[New Thread 0xb7d2bb70 (LWP 2475)] 
[New Thread 0xb752ab70 (LWP 2476)] 
22  QMainWindow w; 
(gdb) bt 
#0 main (argc=1, argv=0xbffff2a4) at ../program/main.cpp:22 
(gdb) s 
QFlags<Qt::WindowType>::QFlags (this=0xbffff164) at /usr/local/Trolltech/Qt-4.8.1/include/QtCore/qglobal.h:2284 
2284  Q_DECL_CONSTEXPR inline QFlags(Zero = 0) : i(0) {} 
(gdb) bt 
#0 QFlags<Qt::WindowType>::QFlags (this=0xbffff164) at /usr/local/Trolltech/Qt-4.8.1/include/QtCore/qglobal.h:2284 
#1 0x080499a4 in main (argc=1, argv=0xbffff2a4) at ../program/main.cpp:22 

답변

0

당신은뿐만 아니라 자신의 바이너리에 대한 디버그 기호를 생성해야합니다. GCC의 -g 옵션을 사용하여 애플리케이션을 컴파일하십시오. 또한 디버깅 할 때 최적화를 해제하는 것이 좋습니다. 이를 위해 GCC의 -O0 플래그를 사용하십시오.

+0

이미 디버그 기호로 빌드 중이 었습니다. 난 그냥 재 컴파일하고 backtrace 동일하게 유지 -O2 B ut 대신 -O0 함께 재시험. – Christophe

+0

그러면 문제가되지 않습니다! 아마도 함수 포인터를 망칠 것입니다; 그 중 하나가 손상되어 프로그램 제어가 어느 심볼과도 일치하지 않는 임의의 위치로 이동하므로 gdb가 인쇄합니까 ?? 함수 이름은 그렇다면 그것은 틀림 없다. –

+1

'fglrx'는 독점 (AMD CAtalyst) 그래픽 드라이버이므로 디버깅 기호를 얻지 못할 것입니다. 무료 소프트웨어를 찾을 수 있다면 그 소프트웨어를 사용해보십시오. –

관련 문제