使用GDB调试Fortran中的MPI程序(在MAC上)

时间:2017-06-29 17:03:53

标签: debugging emacs fortran gdb mpi

我正在使用这篇文章(Using GDB to debug an MPI program in Fortran)的答案在我的Mac上调试MPI Fortran程序。我试图实现弗拉基米尔F给出的答案。但是,之后:

gdb -pid <the_pid_you_got_from_getpid> 

调试器已打开,我收到以下消息:

warning: unhandled dyld version (15)

0x00007fffb6f2ef46 in ?? ()

And when I tried:

(gdb) info locals

我得到了"No symbol table info available"。因此,我无法将gdb附加到正在运行的进程。

我正在使用MacOS 10.12(Sierra),gdb 8.0,并使用为ifort配置的mpif90进行编译(版本:17.0.4)。

关于可能导致我问题的原因的任何想法?

1 个答案:

答案 0 :(得分:2)

如果你没有提交给gdb(事实上,在mac os中作为默认工具链的一部分弃用),你可以使用lldb。

所以,对于像这样的代码:

program main

  use mpi

  integer error
  integer id
  integer p
  call MPI_Init ( error )
  call MPI_Comm_size ( MPI_COMM_WORLD, p, error )
  call MPI_Comm_rank ( MPI_COMM_WORLD, id, error )
  write (*,*) 'Hello: ', id, '/', p
  call MPI_Finalize ( error )
  stop
end

和像这样的编译

mpif90 -g -o fort ./fort.f90

你应该可以按照

的方式启动lldb
mpirun -np 2 xterm -e lldb ./fort

将为您提供两个独立的xterms,其中运行lldb

enter image description here

请注意,对于xterm,您需要安装XQuartz(https://www.xquartz.org

<强>更新

我不确定这是否有助于解决这一特定问题,但您始终可以尝试从源代码编译GDB。看看这里有关如何操作的说明:Building GDB on macOS Sierra

然后,您可以使用xterm和gdb以及您的MPI代码运行mpirun

mpirun -np 2 xterm -e gdb ./mpi_sample

现在,你可以看到dyld版本仍有警告,但代码似乎工作正常。

enter image description here

但问题是,ifort编译代码会发生什么:(在我的情况下,我正在使用:

mpifort --version
GNU Fortran (GCC) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gdb --version
GNU gdb (GDB) 8.0
Copyright (C) 2017 Free Software Foundation, Inc.

mpirun --version
mpirun (Open MPI) 2.0.2