c - 是否可以在 SIGSEGV 处理程序中暂停 C 程序以进行进一步调查?
问题描述
我目前正在准备我的应用程序以进行更多真实世界的测试,以捕捉所有超级罕见且难以重现的边缘情况。我已经安装了 SIGSEGV 处理程序,该处理程序将回溯打印到日志文件,但是它没有提供我想要获取的所有数据。
我希望我的程序在程序崩溃时停止执行(类似于发送 -STOP 信号),这样我就可以在 QtCreator 还活着的时候将它与 gdb 连接到它,并检查崩溃期间所有活动线程中的当前变量,跨越整个堆栈跟踪。
void MessFS_sigsegvHandler(int sig) {
void *array[20];
size_t size;
size = backtrace(array, 20);
MessLog_log(MESS_LOG_ERROR,MESS_LOG_ERROR, "[Core] Critical error: unexpected signal (%d):\n", sig);
backtrace_symbols_fd(array, size, 1);
exit(1); // i would like to pause here instead of terminate
}
可能吗?如果是 - 是否可以将调试器附加到此类暂停的进程?
解决方案
我希望我的程序停止执行
您可以调用sleep()
足够多的秒数来休眠。sleep()
可以安全地用于信号处理程序。根据man signal-safety,它应该是 POSIX.1 的异步信号安全的。
推荐阅读
- python - 如何在python中的元素内的列表中查找匹配项
- visual-studio - 我无法在 Visual Studio 上运行我的 android 模拟器,这可能是什么问题?
- c# - YamlDotNet 反序列化接口列表
- azure-cosmosdb - Cosmos 数据库将在 pull 方法 + 文件中进行索引
- spring-boot - rsocket-js 路由 fireAndForget 到 Spring Boot @MessageMapping
- java - Hibernate 验证器触发偶数字段不违规
- webpack - 如何使 SCSS 模块与 Storybook 和 Gatsby 一起使用
- javascript - 样式化 div 类中第一次出现的文本
- unity3d - 如何找到贝塞尔曲线的距离中点?
- python - 给定选定轴的 2D 线图绘制 3D Numpy 矩阵/数组