我有一个C++应用程序,当我执行某项操作(单击gtk中的按钮)时突然停止工作。我尝试调试它,为SIGTERM,SIGABORT,SIGILL等创建信号处理程序,以使用gcc函数编写回溯,尝试附加调试器,等等。我只是什么都没有得到任何输出,程序只是从内存中消失了。

有没有我尚未尝试过的技术?我不知道如何调试此问题。

我忘了提:这是在Linux系统上(尝试过debian和ubuntu)。两者都使用X11(非Wayland)

最佳答案

它可能是:

  • 信号。默认情况下,gdb在错误信号上停止,因此不需要自定义处理程序。
  • exit()函数以及退出系列的任何其他函数(例如_exit_Exit等)。使用b exit设置断点。
  • 因为它是c++,所以可能会引发异常。抛出异常时,使用catch throw停止。
  • 最后一个线程导出。 b pthread_exit
  • 线程取消。 b pthread_cancel
  • main函数通常到达其结尾。使用反汇编在地址上设置断点。

  • 如果所有这些都无济于事,请在按下按钮之前将其附加到您的应用程序,然后在gdb中使用Ctrl + c暂停它。然后,按按钮(窗口无响应时)。 gtk应用程序通常应从X11队列调度事件,即使该事件已暂停也是如此。使用nisi逐步调试组装。

    关于c++ - 程序崩溃而没有通知的原因是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47990794/

    10-15 01:54
    查看更多