在Qt中重现一个bug:调试代码时出现分段错误

Reproducing a bug in Qt: Segmentation fault when debugging code

本文关键字:代码 调试 bug 分段 错误 Qt 一个      更新时间:2023-10-16

我是Linux、Qt的新手,c++相对初级;所以我遇到的问题很可能是我自己的错……如有任何帮助,不胜感激。

我遇到分割错误时,试图一步一步地去基本上任何项目。例如,QtCreator中包含的表模型项目。在发布或调试中,项目运行没有任何问题。但是,如果我尝试添加断点(当然是在调试中)并逐步执行代码,我很快得到以下随机错误:

下级停止,因为它收到了来自操作系统的信号。

信号名称:SIGSEGV信号信号含义:段错误

QtCreator此时显示了一些小的汇编代码:

        Dump of assembler code for function __nptl_death_event:
0x00e80d00  <+0>:               push   %ebp
0x00e80d01  <+1>:               mov    %esp,%ebp
0x00e80d03  <+3>:               pop    %ebp
0x00e80d04  <+4>:               ret
        End of assembler dump.

I am running:

Qt Creator 2.1.0基于Qt 4.7.2(32位)在Ubuntu 11.04上通过VMWare在Mac上运行

我不知道VMWare是否会成为潜在的问题来源。我怀疑我在调试时也可能做错了什么,因为我不理解外部/附加条款(我还没有时间做一些研究,这么多的事情要在同一时间发现,有点压倒性…)

谢谢你的帮助。

我认为这是您的GDB副本的问题-更具体地说,是模块或库不匹配。尝试重新编译GDB,以便您知道它将与本地glibc和pthreads库一起工作。

作为旁注,该汇编代码是一个空函数。它建立一个堆栈帧,然后将其撕下来,然后返回。它似乎使用了cdecl调用约定,这意味着编写它的库是C(而不是c++)