Fortran程序在gdb下的调试,默认情况下是不可以的,这里面有一些技巧
如果是Fortran77的程序,使用g77编译,g77 -g -o hello hello.f,然后使用gdb hello,开启gdb调试界面,此时输入l是无法列出代码的,因为在调试fortran的时候,要手动指定function或subroutine或program的名字,所以这里要输入 l MAIN__ (MAIN必须大写,后面跟两个下划线),此时就可以列出program main下的代码了,使用break,run,continue这些命令就可以了!如果要调试一个subroutine或function,同理按照这样操作就可以了。之所以要在函数或过程后面加两个下划线纯粹是因为编译器在编译函数的时候的规则而已,比如c调用规则就要把函数名称的前面加两个下划线,作为新的函数名,各种调用规则不同而已
接着来试Fortran90的程序,这里使用g95来编译。g95的官方网站上声称目前还不支持gdb调试,但我的试验结果是可能支持!!!编译和g77一样,唯一不同的是在使用gdb时,不是输入l MAIN__,而是输入 l MAIN_ (MAIN必须大写,后面加一个下划线!!)。看来g95的函数编译规则是在函数名后面加一个下划线啊!由于在g95下,只测试了这个简单的helloworld,所以不敢说g95支持全部的gdb调试选项,所以这里我说可能支持!
如果是Fortran77的程序,使用g77编译,g77 -g -o hello hello.f,然后使用gdb hello,开启gdb调试界面,此时输入l是无法列出代码的,因为在调试fortran的时候,要手动指定function或subroutine或program的名字,所以这里要输入 l MAIN__ (MAIN必须大写,后面跟两个下划线),此时就可以列出program main下的代码了,使用break,run,continue这些命令就可以了!如果要调试一个subroutine或function,同理按照这样操作就可以了。之所以要在函数或过程后面加两个下划线纯粹是因为编译器在编译函数的时候的规则而已,比如c调用规则就要把函数名称的前面加两个下划线,作为新的函数名,各种调用规则不同而已
接着来试Fortran90的程序,这里使用g95来编译。g95的官方网站上声称目前还不支持gdb调试,但我的试验结果是可能支持!!!编译和g77一样,唯一不同的是在使用gdb时,不是输入l MAIN__,而是输入 l MAIN_ (MAIN必须大写,后面加一个下划线!!)。看来g95的函数编译规则是在函数名后面加一个下划线啊!由于在g95下,只测试了这个简单的helloworld,所以不敢说g95支持全部的gdb调试选项,所以这里我说可能支持!