Running GDB in macOS sierra
At some point Apple dropped GNU based toolchain in favor of LLVM. However, sometimes you need these tools. One of such examples is debugging Fortran codes. lldb is not able to do it properly, yet. You can trace the execution of code, you can step over, but you can’t examine variables.
In that case, you need GDB. You can install it following way.
First, get the GDB sources
mkdir src cd src curl "http://ftp.gnu.org/gnu/gdb/gdb-8.0.tar.gz" -o gdb-8.0.tar.gz tar zxf gdb-8.0.tar.gz cd gdb-8.0 ./configure --prefix=$HOME/opt/usr/local make make install
This way, you will install GDB inside $HOME/opt/usr/local. However, installing GDB is not enough. You need to Code Sign it in order to make it possible to debug codes using GDB. To make it possible, do following. If you don’t have Code Signed GDB, it will end with the error.
You can find detailed description of how to Code Sign GDB here.
After you are done, you can test your GDB installation and run the code inside debugger. Lets say we have following code:
! program.f90 program prog integer variable variable = 1 write(*,*) variable end
After compilation with “-g” flag
gfortran -g -o ./program ./program.f90
we can simply run it inside gdb
# Make sure to export location of gdb
export PATH=${PATH}:$HOME/opt/usr/local/bin/
gdb ./program
GNU gdb (GDB) 8.0
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin16.5.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./program...Reading symbols from
...
done.
(gdb) list
1 program prog
2 integer variable
3 variable = 1
4 write(*,*) variable
5 end
(gdb) break 4
Breakpoint 1 at 0x100000e2d: file ./program.f90, line 4.
(gdb) run
Starting program: ./program
[New Thread 0x1403 of process 1234]
warning: unhandled dyld version (15)
Thread 2 hit Breakpoint 1, prog () at ./program.f90:4
4 write(*,*) variable
(gdb) print variable
$1 = 1
(gdb)