Как установить схему именования дампа ядра без su/sudo?

Я разрабатываю программу MPI на машине с Linux, где у меня нет доступа к sudo/su. Поскольку моя программа в настоящее время дает сбой, я хотел бы изучить дампы ядра через gdb. К сожалению, так как программа многопоточная, все потоки пишут в один дамп ядра. Поэтому я хотел бы иметь возможность добавлять PID к каждому отдельному дампу ядра для каждого процесса.

Я знаю, что есть способ сделать это через /proc/sys/kernel/core_pattern, однако у меня нет доступа для этого.

Спасибо за любую помощь.


person Delup    schedule 13.09.2010    source источник
comment
Многопоточность не имеет ничего общего с вашей проблемой (GDB прекрасно справляется с основными файлами, содержащими несколько потоков). Ваша проблема в том, что у вас многопроцессорная программа. Чего я не понимаю, так это почему вам недостаточно одного «ядра» - предположительно, другие ваши процессы падают так же. Даже если это не так, вы должны исправить первую проблему (обнаруженную в первом ядре), прежде чем приступать к исправлению следующей.   -  person Employed Russian    schedule 14.09.2010
comment
@Employed Russian: один процесс, вызвавший ошибку сегментации, не означает, что любой другой процесс также будет ошибкой сегментации.   -  person Stan Graves    schedule 16.09.2010
comment
@semiuseless Это правда, но даже если они этого не сделают, вы должны решить первую проблему, которую увидите в любом случае. Так что одного дампа ядра вам достаточно, чтобы было что исправлять!   -  person Employed Russian    schedule 17.09.2010


Ответы (1)


Отладка приложений MPI в системах, которые настроены таким образом, когда у вас нет root-доступа, может быть сложной задачей. Одним из вариантов решения этой проблемы является использование Valgrind для получения трассировки стека для ваших ошибок сегментации. Это будет полезно только в том случае, если ваше приложение выйдет из строя через разумный период времени при замедлении через Valgrind, и что в этом случае оно все еще будет segfaults.

Я обычно запускаю приложения MPI под Valgrind следующим образом:

% 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.0, vg_out.1, ... до vg_out.$(($N-1)), каждый соответствует рангу в MPI_COMM_WORLD.

person Dave Goodell    schedule 08.03.2011