我想使用GDB来了解关于低级别OPEN MPI呼叫的情况。但是,我无法使用GDB跳转到OpenMPI中的低级库函数。
我首先使用标记" - enable-debug --enable-debug-symbols"编译OpenMPI,因此库应该用" -g"编译。标签。然后我使用" mpicc / path / to / my / code -g -o / dest / code"编译我的测试代码。代码简单如下所示:
#include "mpi.h"
#include <stdio.h>
main(int argc, char *argv[]) {
int numtasks, rank, dest, source, rc, count, tag=1;
int buf;
const int root=0;
MPI_Status Stat;
// sleep still GDB attached
int i = 0;
char hostname[256];
gethostname(hostname, sizeof(hostname));
printf("PID %d on %s ready for attach\n", getpid(), hostname);
fflush(stdout);
while (0 == i)
sleep(5);
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == root) {
buf = 777;
}
printf("[%d]: Before Bcast, buf is %d\n", rank, buf);
MPI_Bcast(&buf, 1, MPI_INT, root, MPI_COMM_WORLD);
printf("[%d]: After Bcast, buf is %d\n", rank, buf);
MPI_Finalize();
}
此代码首先打印每个进程的PID,然后保持睡眠等待连接。然后我用GDB attach方法附加其中一个进程。设定断点&amp;重置i的值将跳出等待循环。
然后,我继续使用&#34; s&#34;下一步我的代码。它应该跳转到低级库函数,如MPI_Init(),MPI_Bcast()。但是,GDB只会进入下一行并忽略跳转到任何功能。不是&#34; bt&#34;可以打印出回溯信息。但是整个代码可以正常运行。
有人发现我在整个过程中犯了什么错误吗?谢谢。