【问题标题】:Getting the Qt Debugger to work (GDB)让 Qt 调试器工作 (GDB)
【发布时间】:2012-02-21 10:06:15
【问题描述】:

我目前正在 Windows 7 上构建,并试图让我的调试器单步执行我的代码。问题是,虽然我将构建配置设置为调试,并且将我的 CONFIG 变量设置为在我的 QMake 文件中调试,但它仍然无法正常工作。

这是我的 QMake 文件:

TEMPLATE = app
CONFIG += console debug
CONFIG -= qt

QMAKE_CXXFLAGS += -g -gdb

SOURCES += main.c \
    Triangle.c \
    GlutTesting.c

HEADERS += \
    Triangle.h \
    Includes.h \
    GlutTesting.h

LIBS += -lSDL -lopengl32 -lfreeglut

请注意,它实际上是用 C 编写并按原样编译的(所有文件都是本机 C 代码,使用 MinGW 编译)。

问题是每次我开始时,即使我设置了一个断点,代码实际上只是将它放大到应用程序当前设置的末尾并停在那里。现在几乎不可能实际调试我的应用程序。

这里有什么问题?每次我用谷歌搜索时,我都会发现一些关于“添加调试符号”的东西,这在 Linux 中很容易做到,但在 Qt Creator 中,它似乎完全可以正确完成(除非我只是错过了一些完全简单的东西)。

【问题讨论】:

  • 尝试注释行 CONFIG -= qt
  • 不幸的是这不起作用...
  • 我会从 .pro 文件中检查 QMake 创建的 Makefile,看看与调试符号相关的选项是否真的添加到了编译器选项中。
  • 我相信你需要设置 CXXFLAG -ggdb,而你输入的是-gdb
  • @Nils Werner 是的,这绝对是个问题,我可以确认这一点。是否是唯一的问题,我不确定。

标签: c qt gdb qt-creator debug-symbols


【解决方案1】:

使用 Qt Creator 2.5.0 在 Linux (Fedora 16) 上遇到类似问题

原来 gdb 在我的主目录中启动并且无法(我不知道为什么)加载正在调试的库的调试符号。每当我强制 gdb 从放置库二进制文件的目录开始时(在 Qt Creator 中,它是通过 Tools->Options->Debugger->Additional Startup Commands 中的其他调试器启动命令完成的:只需使用“cd”到目录二进制文件)一切正常。

另一种解决方案是将环境变量 LD_LIBRARY_PATH 设置为包含二进制目录的完整路径。在 Qt Creator 中,它是在 Project->Run Settings->Run Environment 中完成的。

为了检查调试符号是否已正确加载,通过 Window->Views->Debugger Log 打开 gdb 日志并输入命令“info shared”。

【讨论】:

  • 试过你所说的,即使我在 Windows 上。没有。共享的信息似乎确实输出了一些有趣的数据:一个是我的项目和二进制可执行文件的路径在该列表中无处可寻。有没有办法覆盖它?
【解决方案2】:

这在 Linux 下对我有用,我不确定它是否可以在 Windows 下工作,但无论如何都可以:

在 .pro 文件中,我添加了以下行:

CONFIG += debug

这启用了 QT 系统中的调试。然后我添加了以下内容:

QMAKE_CXXFLAGS += -O0 -g -ggdb

-ggdb 用于 gdb 支持。并且 O(字母 O)0(数字零)是没有优化的——防止编译器优化掉变量。这给了我在 Linux 下调试时需要的所有符号的回溯。这是一个相当标准的 gdb 调试编译选项。但它可能已经被 CONFIG 中的调试选项覆盖了。

在 Linux 下我也重建了项目:

make clean
make

但对于 Windows,如果您使用的是 Visual Studio,则可能需要重新构建。我不知道你的编译工具链是什么。

我知道您使用的是 Windows,如果它也可以在 Windows 下运行,可能值得尝试这些东西。但是,即使它不能在 Windows 下运行,它对于搜索如何在 Linux 下执行此操作的人也可能很有用,所以我认为这是一个有效的答案,即使它可能无法具体回答这个特定问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 2017-02-12
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多