linux - 为程序运行禁用 SIGABRT (Valgrind)
问题描述
我的任务是使用 Valgrind 调试程序。由于使用 Valgrind,程序变得非常慢。这是一个问题,因为程序有一个观察者线程,如果它们在某些函数上花费太多时间,它会用 SIGABRT 杀死慢线程。当程序以这种方式退出时,它处于有效状态,所以即使 SIGABRT 被强制转换,我也希望它保持运行。我无法更改程序以从源代码中关闭观察者线程。
现在我的问题:
Valgrind 或与 Valgrind 兼容的工具是否让我可以选择对程序说:“如果您收到 SIGABRT,请将其视为空操作并继续?”
解决方案
您可以通过使用 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。
推荐阅读
- structr - 安装未在 Ubuntu 21.04 中设置服务
- javascript - 未找到:/1/${url} 数据
- vue.js - 我想在创建之前在 Vue 组件中获取路由器参数
- r - 基于其他数据帧中的索引值的 R 中的选择性索引
- python-3.x - 无法匹配所有必填字段。发票2数据
- r - 发现足球犯规导致成功射中目标
- r - 循环遍历 tibble 中的所有组合
- npm - npm init 没有获取 node_modules 文件夹中的所有包
- angular - 在 Springboot 中使用 Angular 会话
- python - 如何使用 ID、地址、地区、城市、州等列名获取逗号分隔的以下数据的单独列