내 자신의 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
이미 디버그 기호로 빌드 중이 었습니다. 난 그냥 재 컴파일하고 backtrace 동일하게 유지 -O2 B ut 대신 -O0 함께 재시험. – Christophe
그러면 문제가되지 않습니다! 아마도 함수 포인터를 망칠 것입니다; 그 중 하나가 손상되어 프로그램 제어가 어느 심볼과도 일치하지 않는 임의의 위치로 이동하므로 gdb가 인쇄합니까 ?? 함수 이름은 그렇다면 그것은 틀림 없다. –
'fglrx'는 독점 (AMD CAtalyst) 그래픽 드라이버이므로 디버깅 기호를 얻지 못할 것입니다. 무료 소프트웨어를 찾을 수 있다면 그 소프트웨어를 사용해보십시오. –