我想避免在发生任何崩溃的情况下将某些信息从我的程序转储到核心文件中。
为此,我可以使用coredump_filter(http://man7.org/linux/man-pages/man5/core.5.html)
手册页提供以下说明
文件中的值是内存映射类型的位掩码(请参阅 MMAP(2))。如果在掩码中设置了一个位,则表示存储器映射 相应的类型被倾倒;否则他们不会倾倒。该 此文件中的位具有以下含义:
bit 0 Dump anonymous private mappings.
bit 1 Dump anonymous shared mappings.
bit 2 Dump file-backed private mappings.
bit 3 Dump file-backed shared mappings.
bit 4 (since Linux 2.6.24)
Dump ELF headers.
bit 5 (since Linux 2.6.28)
Dump private huge pages.
bit 6 (since Linux 2.6.28)
Dump shared huge pages.
我想知道在我的情况下设置和重置哪个位。我不清楚这些领域是否特别私密和共享。
我有一个缓冲区(unsigned char *)到内存中。如果发生任何崩溃,我不想将其转储到核心文件中。我有什么特定的标志用于mmap吗?请帮忙。提前谢谢。
答案 0 :(得分:3)
coredump_filter
只会设置进程全局设置,所以它只允许你转储所有内存或基本上没有内存。
然而,madvise
有一个标志,可能会更接近你想要的东西:MADV_DONTDUMP
。它将标记未出现在coredump中的特定内存页面。但是,您的程序本身需要运行madvise
;你不能从过程外部设置它(除了使用gdb
,我猜)。
请注意,madvise
仅适用于整个页面。你不能设置标志“这193个字节”或某些不被倾倒。如果您标记了缓冲区所在的页面,那么同一页面的其余部分也不会被转储。如果这对您来说是一个问题,我认为您只需要在缓冲区中mmap
而不是malloc
,这样它就会在页面中独占。