【问题标题】:Reproducing a bug in Qt: Segmentation fault when debugging code重现 Qt 中的错误:调试代码时出现分段错误
【发布时间】:2011-07-14 09:54:51
【问题描述】:

我是 Linux、Qt 的新手,并且在 C++ 方面相对初级;所以我遇到的问题很可能是我自己的错......非常感谢任何帮助。

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

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

信号名称: 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.

我正在跑步:

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

我不知道 VMWare 是否会成为潜在的问题根源。我怀疑我在调试时也可能做错了,因为我不理解外部/附加术语(我还没有时间对此进行一些研究,同时发现了很多东西,有点不知所措...)

感谢您的帮助。

【问题讨论】:

  • 如果你不使用wmware?如果你在运行 ubuntu 的 PC 上运行?
  • 不幸的是,我手头没有任何可用的 PC 来尝试这个...
  • 这在 Windows 上使用 gdb 吗?我在使用 NetBeans 并尝试调试 Qt 应用程序时遇到了类似的问题。我搬到了一个新环境,问题就消失了。我认为这是版本不兼容,但我没有想到任何特定的罪魁祸首。
  • 这是使用 gdb,但在 ubuntu 上通过 mac 上的 vmware,而不是 windows。我的 gdb 版本是:GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2

标签: c++ debugging qt segmentation-fault vmware


【解决方案1】:

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

附带说明,该汇编代码是一个空函数。它设置了一个堆栈帧,再次将其撕下,然后返回。它似乎使用 cdecl 调用约定,这意味着它编写的库是 C(而不是 C++)

【讨论】:

  • 乔希,感谢您的帮助。据我所知,我不认为我在安装过程中编译了自己的 gdb 版本。在进行重新编译之前,是否有一种简单的方法可以确保问题似乎来自那里?我有点害怕,因为它似乎有点遥不可及/打破我的设置的简单方法......我希望我错了:)
  • 您是从 11.04 存储库中获取软件包的,是您拥有它然后升级到 11.04,还是从 Qt 的网站下载的?
  • 您可能还想在 GDB 和 libpthread 上运行 ldd 并查看对象的依赖版本是否匹配 - 只是预感
  • 感谢您的帮助 Josh,非常感谢 :) 抱歉,我还没有必要的声誉来投票您的答案。希望我能尽快回到这个线程并做到这一点。
  • ldd on gdb 给出:linux-gate.so.1 =&gt; (0x001b8000) libreadline.so.6 =&gt; /lib/libreadline.so.6 (0x006df000) libncurses.so.5 =&gt; /lib/libncurses.so.5 (0x00f21000) libz.so.1 =&gt; /lib/i386-linux-gnu/libz.so.1 (0x00de1000) libm.so.6 =&gt; /lib/i386-linux-gnu/libm.so.6 (0x00110000) libpthread.so.0 =&gt; /lib/i386-linux-gnu/libpthread.so.0 (0x0078c000) libdl.so.2 =&gt; /lib/i386-linux-gnu/libdl.so.2 (0x00baf000) libutil.so.1 =&gt; /lib/i386-linux-gnu/libutil.so.1 (0x00cf1000) libpython2.7.so.1.0 =&gt; /usr/lib/libpython2.7.so.1.0 (0x007a8000) libexpat.so.1 =&gt; /lib/i386-linux-gnu/libexpat.so.1 (0x00136000)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多