Qt中分段错误的跟踪

Qt中分段错误的跟踪,qt,debugging,segmentation-fault,Qt,Debugging,Segmentation Fault,我正在用Qt开发一个嵌入式Linux应用程序,遇到了无法跟踪的SIGSEGV问题。我希望能够发布代码,但QtCreator只向我展示了一些汇编代码,并没有提供太多可追溯的堆栈 我可以看到,在尝试分支到无效地址后,崩溃发生在QApplicationPrivate::notify_helper(QObject*,QEvent*)中。我可以看到这是由QApplication::notify()调用的,但这就是Qt Creator给我的所有堆栈信息。在这一点上,我能想到的唯一一件事是,以前的分段错误看起

我正在用Qt开发一个嵌入式Linux应用程序,遇到了无法跟踪的SIGSEGV问题。我希望能够发布代码,但QtCreator只向我展示了一些汇编代码,并没有提供太多可追溯的堆栈

我可以看到,在尝试分支到无效地址后,崩溃发生在
QApplicationPrivate::notify_helper(QObject*,QEvent*)
中。我可以看到这是由
QApplication::notify()
调用的,但这就是Qt Creator给我的所有堆栈信息。在这一点上,我能想到的唯一一件事是,以前的分段错误看起来似乎与杀死一个QTimer有关(我使用的许多计时器都是单次触发的),但我被丢弃到反汇编中,无法确定是哪个QTimer导致了问题。那次坠机是偶发的,而这一次似乎相当一致

有谁能建议我可以做些什么来获取更多信息,以便我追踪此故障的来源?我可以根据需要提供额外的细节,尽管我可能需要知道我应该在哪里寻找

编辑:
结果表明,上一个错误的原因是未正确检查数组索引的边界。当反汇编指向
QObject::startTimer(int)
时,我仍然偶尔会看到与QTimer相关的崩溃,但在这种情况下,我看不到任何明显的原因。同样,堆栈无法洞察哪个计时器可能导致问题;我只能看到对
QTimer::start()
的调用,然后是
QObject:startTimer(int)

您需要在调试模式下从源代码构建Qt,以便调试器可以跟踪到Qt的源代码。
startTimer
中的segfault通常表示您正在使用指向QObject的悬空指针,或者已损坏对象实例。是的,您需要调试符号。还可以将对象名称设置为所有计时器