使用GDB调试MPI代码时遇到问题

时间:2016-10-21 04:44:50

标签: c debugging gdb openmpi

我想使用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;可以打印出回溯信息。但是整个代码可以正常运行。

有人发现我在整个过程中犯了什么错误吗?谢谢。

0 个答案:

没有答案