首页 > 解决方案 > 为程序运行禁用 SIGABRT (Valgrind)

问题描述

我的任务是使用 Valgrind 调试程序。由于使用 Valgrind,程序变得非常慢。这是一个问题,因为程序有一个观察者线程,如果它们在某些函数上花费太多时间,它会用 SIGABRT 杀死慢线程。当程序以这种方式退出时,它处于有效状态,所以即使 SIGABRT 被强制转换,我也希望它保持运行。我无法更改程序以从源代码中关闭观察者线程。

现在我的问题:

Valgrind 或与 Valgrind 兼容的工具是否让我可以选择对程序说:“如果您收到 SIGABRT,请将其视为空操作并继续?”

标签: linuxvalgrind

解决方案


您可以通过使用 vgdb 在 valgrind + gdb 下运行程序来实现您想要的。

使用 gdb,您可以控制如何处理 SIGABRT 信号。

例如,使用以下命令启动您的程序: valgrind --vgdb-stop-at=startup your_program

在另一个窗口中,启动 gdb: (gdb) handle SIGABRT nostop print nopass (gdb) target remote | vgdb (gdb) 继续

有关详细信息,请参阅http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver


推荐阅读