2011-07-14 92 views
0

我是Linux,Qt的新手,并且在C++中属于初级;所以我遇到的问题很可能是我自己的错......任何帮助都非常感谢。在Qt中重现错误:调试代码时出现分段错误

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

The inferior stopped because it received a signal from the Operating System.

Signal name : SIGSEGV Signal meaning : Segmentation fault

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 Based on Qt 4.7.2 (32 bit) on Ubuntu 11.04 via VMWare on a Mac.

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

感谢您的帮助。

+0

如果你不使用wmware?如果你在运行ubuntu的PC上运行? –

+0

不幸的是,我手边没有任何PC可以试试这个... – Sam

+0

这是否在Windows上使用gdb?我遇到过与NetBeans类似的问题,并试图调试Qt应用程序。我搬到了一个新的环境中,问题消失了。我认为这是一个版本不兼容,但我没有任何特别的罪魁祸首。 – Jay

回答

1

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

作为一个方面说明,该汇编代码是一个空函数。它建立一个堆栈框架,再次将它撕下来并返回。它似乎使用的cdecl调用约定,这意味着它所编写的库是C(而不是C++)

+0

Josh,感谢您的帮助。 据我所知,我不认为我在我的安装过程中编译了我自己的gdb版本。在进入这种重新编译之前,有没有一种简单的方法可以确保问题似乎来自那里?我有点害怕它,因为它似乎有点超出了我的范围/一个简单的方法来打破我的设置......我希望我错了:) – Sam

+0

你从11.04版本的软件包中得到了软件包吗?你有它,然后升级到11.04,或者你从Qt的网站下载? – Josh

+0

您可能还想在GDB和libpthread上运行ldd并查看对象的依赖版本是否匹配 - 只是一个预感 – Josh

相关问题