如何使 QtCreator 在调试而不是汇编时显示“正常”代码?

Posted

技术标签:

【中文标题】如何使 QtCreator 在调试而不是汇编时显示“正常”代码?【英文标题】:How to make QtCreator show "normal" code while debugging instead of assembly? 【发布时间】:2016-04-07 04:50:14 【问题描述】:

我在 Ubuntu 14.04 上使用 QtCreator 3.6.1,gcc 作为我的主要编译器。

我的 Qt 项目正在调试模式下构建。但是,每当我按 F5 尝试通过设置断点来单步执行代码时,我的代码就会崩溃(因为代码有问题),但它并没有在断点处停止,而是向我显示了汇编输出!

这是一个屏幕截图。代码似乎在你看到黄色箭头的地方崩溃了,但我只是不知道它在源代码中的哪个位置!!!

事实上,我已经在 cout 语句处设置了断点,正如您在此处看到的那样。

甚至没有执行cout 语句。在执行 main 之前,代码似乎崩溃了。我不知道这是 QtCReator 问题还是其他问题。我添加了-O0-g 选项 到 QMAKE_CXXFLAGS 选项只是为了确保正在添加调试符号,但我遇到了这个问题。

编辑: 我的堆栈跟踪看起来像这样

我也不确定这是否有帮助,但是当我通过终端运行程序时,程序名称前有LD_DEBUG,我得到了大量的输出。

最后三行是

.
.
.
      7934: symbol=_ZN11QMetaObject8addGuardEPP7QObject;  lookup in file=/usr/lib/x86_64-linux-gnu/libQtGui.so.4 [0]
      7934: symbol=_ZN11QMetaObject8addGuardEPP7QObject;  lookup in file=/usr/lib/x86_64-linux-gnu/libQtCore.so.4 [0]
      7934: binding file /usr/lib/x86_64-linux-gnu/libQtGui.so.4 [0] to /usr/lib/x86_64-linux-gnu/libQtCore.so.4 [0]: normal symbol `_ZN11QMetaObject8addGuardEPP7QObject'
[1]    7934 segmentation fault (core dumped)  LD_DEBUG=all ./CGALQT_Fix_MainWindow

【问题讨论】:

您确定它在您的代码中崩溃了吗?如果它在没有可用调试信息的另一个库(例如 libc)中崩溃,则无论您的代码是否具有完整的调试信息,它仍会显示这些帧的程序集。完整的回溯是什么样的? @FrankOsterfeld 我明白了。你能告诉我如何在 QtCreator 中获得完整的回溯吗?我不太确定那是什么。 @FrankOsterfeld 我不知道它是否在 in 我的代码中崩溃。甚至我在第一行代码中放置的 cout 语句都没有被执行 它在底部区域中列出,其中有很多 call_init() 。我认为有一个上下文菜单选项可以复制内容。您是否有任何全局变量在初始化时可能会崩溃? @FrankOsterfeld 好的,请参阅已编辑的问题,我已将堆栈跟踪放在最后。我的代码中没有任何全局变量。但正如你所说,它不会在我的代码中崩溃 in ......而是一些dl-init.c 文件。不确定那个文件是什么。什么是崩溃初始化? 【参考方案1】:

为此,您的应用程序必须链接到调试库。要调查您的应用崩溃的位置,您通常不需要这个,因为您可以在函数堆栈中看到您自己的所有方法。

【讨论】:

以上是关于如何使 QtCreator 在调试而不是汇编时显示“正常”代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使VS2019逐语句调试时显示每行结果?

"image watch" for QtCreator

Laravel 5刀片在出现错误而不是抛出异常时显示空白页面

如何在点击时显示 0:00 而不是 NaN:NaN

如何在应用程序首先加载而不是Angular 5中的appComponent时显示登录组件

Qt Creator 调试器未显示返回值