2017-06-29 71 views
0

我使用本帖子的答案(Using GDB to debug an MPI program in Fortran)在我的Mac上調試MPI Fortran程序。我試圖實現一個弗拉基米爾·F.給出然而,經過了答案:使用GDB調試Fortran中的MPI程序(在MAC上)

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以及編譯mpif90爲ifort配置(版本:17.0.4)。

任何想法可能是我的問題的原因?

+0

請告訴你如何編譯你的代碼*必須*告訴。編譯器用'-g'生成調試符號,另外,還有多種不同格式的動態庫和調試符號,gdb可能不支持你當前的設置 –

+0

感謝你的回答,我用mpif90 -ggdb test.f90然後我跑了使用mpirun -n 2 ./a.out。 – diex

+0

另外我試了mpif90 -g main.f90 。它沒有工作。 – diex

回答

1

如果你沒有提交給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 

,這將給你兩個,分別與lldb運行xtermms

enter image description here

請注意,爲的xterm,你需要安裝XQuartz(https://www.xquartz.org

更新:

我不知道這是否會與此特定問題上需要幫助,但你總是可以嘗試從源代碼編譯GDB。看看這裏說明如何做到這一點:Building GDB on macOS Sierra

然後,您可以使用xterm和gdb和你的MPI這樣的代碼

mpirun -np 2 xterm -e gdb ./mpi_sample 

運行的mpirun現在,你可以看到,仍有與警示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 
+0

您可以使用'(lldb)進程附加-pid 123'或 '(lldb)attach -p 123'來實現與問題中鏈接的功能類似的功能。 –

+0

您是否確認lldb支持英特爾Fortran? –

+0

我沒有ifort編譯器:(不能說任何關於那個:(仍然,我猜這至少值得一試 – mko