dim*_*mba 7 debugging gcc memory-management
64位系统上的GCC清洁剂创建了大约17TB的巨大核心文件.
如果您需要用于死后分析的核心,您需要将以下选项传递给清洁剂:
unmap_shadow_on_exit = 1 - 取消巨大的内存,用于退出时的家务
disable_core = 0 - 在64位系统上创建核心文件
但是,如果使用自己的信号处理程序处理SIGSEGV,则unmap_shadow_on_exit不起作用,并且会创建一个巨大的核心文件.
任何想法如何强制unmap_shadow_on_exit来完成它的工作?
常规信号处理程序不会丢失,而是在您设置客户处理程序时返回- 因此,在您完成自己的处理程序中的任何功能后,可能会简单地调用该代码作为您自己的信号处理程序的一部分。
所以像;
sighandler_t oldSigHandler = 0;
void mySigHandler(int sig) {
... your code ...
if (oldSigHandler) oldSigHandler(sig);
}
void setMySignalHandler(int sig) {
oldSigHandler = signal(sig, mySigHandler);
}
Run Code Online (Sandbox Code Playgroud)
我通常认为信号处理程序是邪恶的,并试图避免它们——但这可能对你有用。
或者,如果您只想避免核心转储文件,您可以尝试使用ulimit -cshell 或您自己的代码中的编程来限制核心转储的允许大小- 但是以这种方式截断的核心文件并不总是有效这gdb就是你的需要。