C 使用运行进程的共享内存收集内核转储

C 使用运行进程的共享内存收集内核转储,c,linux,shared-memory,coredump,C,Linux,Shared Memory,Coredump,核心转储只收集进程空间,而不收集为进程间通信而创建的共享内存。如何使核心转储也包含运行进程的共享内存?核心文件捕获包括共享内存在内的完整进程地址空间。您可以通过在Linux上使用gcore命令生成核心文件进行检查,然后检查存储在核心文件共享内存中的特定内容。在/proc/PID/coredump\u filter中设置核心文件过滤器: 控制哪些映射写入核心转储 Since kernel 2.6.23, the Linux-specific /proc/PID/coredump_filter

核心转储只收集进程空间,而不收集为进程间通信而创建的共享内存。如何使核心转储也包含运行进程的共享内存?

核心文件捕获包括共享内存在内的完整进程地址空间。您可以通过在Linux上使用gcore命令生成核心文件进行检查,然后检查存储在核心文件共享内存中的特定内容。

/proc/PID/coredump\u filter
中设置核心文件过滤器:

控制哪些映射写入核心转储

   Since kernel 2.6.23, the Linux-specific /proc/PID/coredump_filter
   file can be used to control which memory segments are written to the
   core dump file in the event that a core dump is performed for the
   process with the corresponding process ID.

   The value in the file is a bit mask of memory mapping types (see
   mmap(2)).  If a bit is set in the mask, then memory mappings of the
   corresponding type are dumped; otherwise they are not dumped.  The
   bits in this file have the following meanings:

       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.
       bit 7 (since Linux 4.4)
              Dump private DAX pages.
       bit 8 (since Linux 4.4)
              Dump shared DAX pages.

   By default, the following bits are set: 0, 1, 4 (if the
   CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS kernel configuration option is
   enabled), and 5.  This default can be modified at boot time using the
   coredump_filter boot option.

我已尝试过,但无法访问共享内存。必须有一种方法来启用具有共享内存的核心转储。请帮助您是否从根用户生成了核心文件?是的,我们需要在coredump_筛选器上启用一点。这有助于我使用sprintf(cmd,“echo 0xff>/proc/%d/coredump_筛选器”,getpid());系统(cmd);它成功了。谢谢安德鲁!