linux - gdb:当 fglrx_dri.so 发生段错误时如何获得完整的回溯?

标签 linux debugging gdb backtrace ati

在运行我自己的基于 Qt 的 OpenGL 应用程序时,我在 fglrx dri 库中遇到段错误。我从 gdb 获得的回溯(为 Qt 和我自己的应用程序安装了 dbg 符号):

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 ?? ()

我无法从我的代码中看到我在哪里调用了导致段错误的 fglrx 函数。我如何扩展此回溯以从 main() 函数向下查看到 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

最佳答案

您还必须为自己的二进制文件生成调试符号。使用 GCC 的 -g 选项编译您的应用程序。还建议在调试时关闭优化;为此目的使用 GCC 的 -O0 标志。

关于linux - gdb:当 fglrx_dri.so 发生段错误时如何获得完整的回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11168676/

相关文章:

c++ - 如何让 GNU 调试器 gdb 在启动/重新启动时附加到守护进程?

linux - 如何调整根文件系统分区的大小 Debian Jessie BeagleBone Black

linux - 如何更改 Influxdb 存储文件夹的位置?

c# - 浮点差异取决于调试构建的运行方式

ruby - 如何在运行时调试我的 Rack 应用程序?

linux - 逐行读入文件并在另一个文件中搜索部分匹配的行

javascript - 在 Android 平板电脑/手机上调试 javascript?

ruby-on-rails - 放置调试语句

c++ - 堆栈跟踪在到达我的代码之前停止(在使用 NDK 的 Android 上)

c++ - 我可以使用使用调试符号重新编译的相同二进制文件来调试由没有调试符号的 C++ 二进制文件生成的内核吗