我正在使用这篇文章(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)。
关于可能导致我问题的原因的任何想法?
答案 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
你应该可以按照
的方式启动lldbmpirun -np 2 xterm -e lldb ./fort
将为您提供两个独立的xterms,其中运行lldb
请注意,对于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版本仍有警告,但代码似乎工作正常。
但问题是,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