我想在我的C++应用程序中的特定位置强制内核转储.

我知道我可以这样做:

int * crash = NULL;
*crash = 1;

但我想知道有没有更干净的方法?

顺便说一下,我正在使用Linux.

推荐答案

提高信号号6(Linux中为SIGABRT)是一种方法(但请记住,在所有POSIX实现中,SIGABRT不是required,所以如果这不是快速脏调试代码,您可能希望使用SIGABRT本身).

#include <signal.h>
: : :
raise (SIGABRT);

调用abort()也会导致核心转储,您甚至可以通过在子进程中先调用fork(),然后调用abort()来终止进程,详细信息请参见this answer.

C++相关问答推荐

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

是否可以在C中进行D3 D12申请?

为什么PLT表中没有push指令?

在C中使用JMP_buf数组进行线程化(在xv6中测试)

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

如何调试LD_PRELOAD库中的构造函数?

识别和处理c中整数溢出的最佳方法?

将 struct 传递给函数

对重叠字符串使用MemMove

CC2538裸机项目编译但不起作用

GTK3按钮信号错误

在txt文件中找到指定的字符串,并从数字中减go 相同的值

不同出处的指针可以相等吗?

为 struct 中的数组动态分配内存时出错

搜索使用int代替time_t的用法

在C中,为什么这个带有递增整数的main函数从不因溢出而崩溃?

在NASM中链接Linux共享库时出错-';将R_ X86_64_;foo';

为什么孤儿进程在 Linux 中没有被 PID 1 采用,就像我读过的一本书中声称的那样?

在C中定义函数指针?

为什么程序在打印每个数字之前要等待所有输入?