如何在没有su / sudo的情况下设置核心转储命名方案?

时间:2010-09-13 00:44:40

标签: multithreading gdb mpi coredump

我正在Linux机器上开发一个MPI程序,我没有sudo / su访问权限。由于我的程序目前是段错误的,我想通过gdb检查核心转储。不幸的是,由于程序是多线程的,所有线程都写入一个核心转储。所以我希望能够将PID附加到每个进程的每个单独的核心转储中。

我知道有一种方法可以通过/ proc / sys / kernel / core_pattern来实现,但我无权写入此内容。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在没有root访问权限的情况下,在以这种方式配置的系统上调试MPI应用程序会很麻烦。解决此问题的一个选择是使用Valgrind来获取segfault的堆栈跟踪。只有当您的应用程序在通过Valgrind减速的合理时间内失败时才会有用,并且在这种情况下它仍然会出现段错误。

我通常在Valgrind下运行MPI应用程序,如下所示:

% mpiexec -n 5 valgrind -q /path/to/my_app

这会将所有Valgrind输出发送到标准错误。但是,如果我希望将输出分成不同的文件,那么你可以获得更多的爱好者:

% mpiexec -n 5 valgrind -q --log-file='vg_out.%q{PMI_RANK}' /path/to/my_app

这是MPICH2的设置。我认为对于Open MPI,您需要将PMI_RANK替换为OMPI_MCA_ns_nds_vpid,但如果这对您不起作用,那么您需要在讨论列表中与Open MPI开发人员联系。在任何一种情况下,这将产生N个文件,其中N是MPI_COMM_WORLD的大小,每个文件名为vg_out.0vg_out.1,...,到vg_out.$(($N-1)),每个对应于MPI_COMM_WORLD中的排名。