Valgrind + gdb отладка с помощью MPI, ошибка в библиотеке?

У меня проблема с отладкой gdb + valgrind. Я запускаю valgrind с опцией vgdb, а затем в другом сеансе gdb с целевой удаленной командой. Однако похоже, что в начале инициализации MPI есть ошибки. Я получаю следующие типы ошибок:

warning: cannot close "/usr/lib64/openmpi/lib/openmpi/mca_btl_ofud.so": Invalid operation <br/>
warning: cannot close "/lib64/libosmcomp.so.3": Invalid operation <br/>
warning: cannot close "/lib64/librdmacm.so.1": Invalid operation <br/>
warning: cannot close "/lib64/libibverbs.so.1": Invalid operation <br/>
warning: cannot close "/lib64/libibumad.so.3": Invalid operation <br/>
warning: cannot close "/usr/lib64/openmpi/lib/openmpi/mca_btl_openib.so": Invalid operation <br/>
warning: cannot close "/usr/lib64/openmpi/lib/openmpi/mca_pml_bfo.so": Invalid operation <br/>
warning: cannot close "/usr/lib64/openmpi/lib/openmpi/mca_pml_csum.so": Invalid operation <br/>
warning: cannot close "/usr/lib64/openmpi/lib/openmpi/mca_pml_v.so": Invalid operation

Тогда я получаю ошибку:

Program received signal SIGTRAP, Trace/breakpoint trap.
0x0000000007950277 in __libc_writev (fd=7, vector=0x9a40f90, count=3) at ../sysdeps/unix/sysv/linux/writev.c:50
c50         
result = INLINE_SYSCALL (writev, 3, fd, CHECK_N (vector, count), count); 

Проблема в том, что после того, как я нажму «Продолжить», на экране появляется сообщение «Продолжается», но кажется, что программа больше не выполняется. До того, как я получил эти ошибки в библиотеке MPI (PMPI_Init (в /usr/lib64/openmpi/lib/libmpi.so.1.0.6)), о которых сообщает valgrind, я не мог проверить ошибку с помощью gdb, я постоянно получал :

Cannot access memory at address 0x39 
Missing separate debuginfos, use: debuginfo-install keyutils-libs-1.5.8-1.fc18.x86_64 krb5-libs-1.10.3-17.fc18.x86_64 libcom_err-1.42.5-1.fc18.x86_64 libesmtp-1.0.6-4.fc18.x86_64 libselinux-2.1.12-7.3.fc18.x86_64 openssl-libs-1.0.1e-37.fc18.x86_64 pcre-8.31-5.fc18.x86_64

Кажется, что в библиотеке mpi есть ошибка, но, поскольку я не являюсь опытным пользователем gdb, я не уверен на 100%. Есть какие-нибудь предположения, что может быть не так?
Заранее спасибо!


person user3616359    schedule 20.02.2015    source источник


Ответы (1)


Прежде всего, почему вы пытаетесь использовать gdb и valgrind вместе? Найдите ошибку с помощью gdb, а затем найдите утечку памяти с помощью valgrind после исправления ошибок.

По поводу GDB и сигналов. GDB перехватит все сигналы до того, как они попадут в ваше приложение.

Итак, если ваше приложение не должно получать сигналы, вам нужно выяснить, почему оно их получает.

Однако вы можете попросить GDB игнорировать все сигналы, например:

gdb -p $prodid -x $file

>> cat file
>> handle SIGUSR1 nostop
   continue 
person Kam    schedule 20.02.2015
comment
Могу ли я сделать это с помощью команды / path / to / gdb / path / to / executable? - person user3616359; 20.02.2015
comment
У меня были ошибки Недопустимое чтение размера 2, но и в начале выполнения у меня было много ошибок, связанных с инициализацией MPI. Я не могу понять, что происходит, а с --track-origins я не могу найти, где я сделал ошибку с указателями. С точки зрения приложения, я вижу некоторые ошибки в конечном результате по сравнению с использованием только одного процесса. - person user3616359; 20.02.2015
comment
Не используйте valgrind с gdb - person Kam; 20.02.2015
comment
Итак, ваша проблема не имеет ничего общего с gdb или valgrind. Вам не удалось инициализировать MPI из вашего приложения. Затем разместите код в другом вопросе. - person Kam; 20.02.2015
comment
Ok. Спасибо. Я думал, что gdb и valgrind помогут мне понять, почему у меня неверное чтение размера 2. Я впервые столкнулся с такой ошибкой. - person user3616359; 20.02.2015