Qt应用程序立即崩溃,没有调试信息。我该如何追踪问题?

3
我运行了一个我构建的Qt应用程序:
./App
Segmentation fault

我使用strace运行它:

strace ./App
execve("./App", ["./App"], [/* 27 vars */]) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Process 868 detached

再次,没有有用的信息。

我使用gdb运行它:

(gdb) run
Starting program: /root/test/App
Reading symbols from shared object read from target memory...(no debugging symbols found)...done.
Loaded system supplied DSO at 0xffffe000

Program received signal SIGSEGV, Segmentation fault.
0x00000001 in ?? ()

再次,没有任何内容。

我使用valgrind运行它:

==948== Process terminating with default action of signal 11 (SIGSEGV)
==948==  Bad permissions for mapped region at address 0x0
==948==    at 0x1: (within /root/test/App)

即使我加入调试符号,也没有提供更多有用的信息。 ldd 显示所有库都被正确链接。
有其他方法可以找出问题吗?我甚至无法进行标准的 printf、cout 等调试。可执行文件似乎根本没有开始运行。
我使用符号重建,并尝试了下面的建议。
(gdb) break main
Breakpoint 1 at 0x45470
(gdb) run
Starting program: /root/test/App
Breakpoint 1 at 0x80045470
Reading symbols from shared object read from target memory...done.
Loaded system supplied DSO at 0xffffe000

Program received signal SIGSEGV, Segmentation fault.
0x00000001 in ?? ()

我检查了静态初始化程序,但好像没有发现任何问题。
是的,我尝试过printf、cout等方法。它甚至无法进入主程序,因此我正在寻找链接库中的静态初始化程序问题,并逐个添加这些问题。我也没有得到任何堆栈跟踪信息。

1
在 gdb 中执行“run”之前,尝试在 main 函数处设置断点(break main),并逐行调试每一行代码。 - codelogic
可能是其中一个链接库中存在静态初始化器。肯定听起来像是libc和/或静态初始化器出了问题,可能是由于错误的链接(可能是不同的架构或32/64位差异,虽然不确定这种情况会如何发生)。 - codelogic
你尝试从 gdb 中获取回溯信息了吗? - rohanpm
1
谢谢大家,看起来是在boost::filesystem中的静态初始化器。我移除了引用并将其替换为标准代码,现在一切都正常工作了。 - jjacksonRIAB
1个回答

0

尝试通过strace运行它,这可能会给你一些提示,在程序崩溃之前发生了什么。此外,在gdb中进行回溯不起作用吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接