我的任务是使用Valgrind调试程序。由于使用了Valgrind,程序变得非常慢。这是一个问题,因为该程序具有一个观察程序线程,如果它们在某些函数上花费过多时间,则它们会杀死使用SIGABRT的慢线程。当程序以这种方式退出时,它处于有效状态,因此即使SIGABRT被强制转换,我也要保持程序运行。我无法更改程序以从源代码关闭监视程序线程。
现在我的问题:
Valgrind或与Valgrind兼容的工具是否可以让我选择对程序说:“如果收到SIGABRT,将其视为空操作并继续操作?”
您可以通过使用vgdb在valgrind + gdb下运行程序来实现所需的目标。
然后使用gdb,您可以控制如何处理SIGABRT信号。
例如,使用以下命令启动程序:valgrind --vgdb-stop-at =启动your_program
在另一个窗口中,启动gdb:(gdb)处理SIGABRT nostop打印nopass(gdb)目标远程| vgdb(gdb)继续
请参见http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver以获取更多信息。