用MPI调试Valgrind + gdb,库中有错误吗?

时间:2015-02-20 13:28:35

标签: c++ debugging gdb mpi valgrind

我遇到gdb + valgrind调试问题。我使用vgdb选项运行valgrind,然后使用target remote命令运行另一个会话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); 

问题是,在我按下继续后,在屏幕上我收到消息&#34;继续。&#34;,但似乎程序不再执行了。 在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%肯定。有什么建议可能有什么不对吗?
提前谢谢!

1 个答案:

答案 0 :(得分:1)

首先,你为什么要一起使用gdb和valgrind?使用gdb找到bug,然后在修复bug后使用valgrind找到内存泄漏。

关于GDB和信号。 GDB会在到达您的应用程序之前捕获所有信号。

因此,如果您的应用程序不应该接收信号,那么您需要找出它接收信号的原因。

但是你可以要求gdb忽略所有信号,如下所示:

gdb -p $prodid -x $file

>> cat file
>> handle SIGUSR1 nostop
   continue