GCC sanitizer在 64 位系统上创建 huge core files约 17TB。
如果您想要一个用于死后分析的核心,您需要将以下选项传递给 sanitizer:
但是,如果您使用自己的信号处理程序处理 SIGSEGV,则 unmap_shadow_on_exit 不起作用并且会创建一个巨大的核心文件。
任何想法如何强制 unmap_shadow_on_exit 完成它的工作?
最佳答案
常规信号处理程序不是 lost but returned当您设置您的客户处理程序时 - 因此,在您完成您自己的处理程序中的任何功能之后,简单地调用该代码作为您自己的信号处理程序的一部分可能会起作用。
所以像;
sighandler_t oldSigHandler = 0;
void mySigHandler(int sig) {
... your code ...
if (oldSigHandler) oldSigHandler(sig);
}
void setMySignalHandler(int sig) {
oldSigHandler = signal(sig, mySigHandler);
}
我通常认为信号处理程序是邪恶的,并尽量避免它们——但这可能对你有用。
或者,如果您只想避免核心转储文件,您可以尝试使用
ulimit -c
限制核心转储的允许大小。从 shell 或 programmatic从您自己的代码中 - 但是,以这种方式截断的核心文件并不总是适用于 gdb
这是你的需要。
关于debugging - gcc sanitizer : unmap_shadow_on_exit not honored with custom SIGSEGV handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37043314/