c++ - 使用 MPI 进行 Valgrind+gdb 调试,库中出现错误?

标签 c++ debugging gdb mpi valgrind

我在调试 gdb+valgrind 时遇到问题。我使用 vgdb 选项运行 valgrind,然后在另一个 session 中使用目标远程命令运行 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%确定。有什么建议可能是错的吗?
提前致谢!

最佳答案

首先,您为什么要同时使用 gdb 和 valgrind?使用 gdb 查找错误,然后在修复错误后使用 valgrind 查找内存泄漏。

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

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

但是你可以要求 gdb 忽略所有信号,像这样:

gdb -p $prodid -x $file

>> cat file
>> handle SIGUSR1 nostop
   continue 

关于c++ - 使用 MPI 进行 Valgrind+gdb 调试,库中出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28630146/

相关文章:

c++ - clang无法针对新的MSVC 2019和Windows SDK 10.0.17763.0构建libc++(重新定义nothrow_t,new,delete,new [],delete [])

c++ - 使用arduino解码GPS NMEA代码

C++ vector 调试实现

java - Android 程序失败。没有错误,没有日志猫。没有任何线索

delphi - 在集成调试器中是否有一个用于异常的隐式变量

c++ - 如何区分合法大小为 1 的类和空类?

string - 为什么 GDB 认为我的 Fortran 字符串是 ~4GiB

gdb - 自动化 gdb : show backtrace at every call to function puts

gdb - 如何调试在 dlopen()'ed 插件中中止的核心转储?

C++(和数学): fast approximation of a trigonometric function