Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 使用GDB在Fortran(MAC)中调试MPI程序_Debugging_Emacs_Fortran_Gdb_Mpi - Fatal编程技术网

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

Debugging 使用GDB在Fortran(MAC)中调试MPI程序,debugging,emacs,fortran,gdb,mpi,Debugging,Emacs,Fortran,Gdb,Mpi,我用这篇文章()的答案在我的Mac上调试一个MPI Fortran程序。我试图实现Vladimir F给出的答案。但是,在: gdb -pid <the_pid_you_got_from_getpid> 我得到了“没有可用的符号表信息”。因此,我无法将gdb附加到正在运行的进程 我正在使用MacOS 10.12(Sierra)、gdb 8.0,并使用为ifort配置的mpif90(版本:17.0.4)进行编译 关于我的问题的原因,你有什么想法吗?如果你对gdb没有那么投入(事实上

我用这篇文章()的答案在我的Mac上调试一个MPI Fortran程序。我试图实现Vladimir F给出的答案。但是,在:

gdb -pid <the_pid_you_got_from_getpid> 
我得到了
“没有可用的符号表信息”
。因此,我无法将gdb附加到正在运行的进程

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


关于我的问题的原因,你有什么想法吗?

如果你对gdb没有那么投入(事实上,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
mpirun -np 2 xterm -e gdb ./mpi_sample
您应该能够按照以下方式启动lldb

mpirun -np 2 xterm -e lldb ./fort
这将为您提供两个单独的XTERM,并运行lldb

请注意,对于xterm,您需要安装XQuartz()

更新:

我不确定这是否有助于解决这个问题,但您可以尝试从源代码编译GDB。请查看此处,了解如何执行此操作的说明:

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

mpif90 -g -o fort ./fort.f90
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

请演示如何编译代码。您必须告诉编译器通过
-g
生成调试符号。此外,动态库和调试符号有多种不同格式,gdb可能不支持您的当前设置。感谢您的回答。我使用mpif90-ggdb test.f90编译,然后使用mpirun-n 2运行./a.out.我还尝试了mpif90-g main.f90。它也不起作用。用ifort直接编译的简单串行程序怎么样?我可以编译并调试它,没有问题。您可以使用
(lldb)进程附加--pid 123
(lldb)附加-p 123
,以实现与问题中链接的功能类似的功能。您确认lldb支持英特尔Fortran吗?我没有iFortran编译器:(对此不能说:(尽管如此,我想至少值得一试。是的,的确如此。看起来OP在调试器和某个库之间存在一些不兼容。不同的调试器可以修复它。