生成核心转储以及文本转储linux
Generate core dump as well as text dump linux
如果我只设置coredump limit为unlimited。linux正在生成核心转储文件。但如果我这样做,但信号处理以及设置核心转储限制为无限制。Linux不生成核心转储。
signal(SIGINT, SignalHandler);
signal(SIGSEGV, SignalHandler);
如何在linux中生成文本转储以及核心转储?
将信号处理程序设置为一次射击模式(例如使用SA_RESETHAND标志为sigaction(2)),并在自定义SIGINT/SIGSEGV信号处理程序结束时调用abort()。
使用raise()函数为我捕获崩溃信息并转储核心信息。
https://www.man7.org/linux/man-pages/man3/raise.3.html一如既往地注册您的信号,但也使用OR设置SA_RESETHAND标志(一次呼叫):
sa.sa_flags = SA_SIGINFO | SA_RESETHAND;
https://www.man7.org/linux/man-pages/man2/sigaction.2.html 如果你设置了该标志,一旦信号处理程序被调用,下一次接收到相同的信号时,你的处理函数将被默认的处理函数所取代。
因此,第一次信号到达时,解析信号信息并在信号处理程序中执行所需的操作。在处理程序结束之前,调用raise()。
void signalHandler(int receivedSignal, siginfo_t* info, void* args)
{
/* Parse args and info as you wish */
...
/* Re-trigger the same signal, but now the kernel or systemd will handle it
and dump the core status */
raise(receivedSignal);
}
raise()将触发您刚才处理的相同信号,但由于信号处理函数是一次性的,您的进程现在将忽略重复的信号。内核或systemd将捕获这个信号,并生成一个核心转储。
在我的例子中,如果使用raise(),信号处理程序中的崩溃信息和核心转储中的崩溃信息确实匹配。
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- C++快速将 int 数组内容转储到文本文件中
- 收集Visual Studio IntelliSense错误,然后通过脚本将其转储到文本文件中
- 转储DirectShow滤波器图到图像或文本文件
- 生成核心转储以及文本转储linux