本文共 1081 字,大约阅读时间需要 3 分钟。
文章来源:
本文主要示例一些平常较少使用到的GDB功能,掌握这些用法有助于提高GDB调试和解决问题的能力。
1) 查看宏 默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令p,这和查看变量的值的方法相同,如果想查看宏的定义,使用 “-macro expand”命令即可 2) 如果执行一连串命令? 这个借助命令“source”即可,“source”的参数为一个存有一串命令的文件名 3) 如何同时给多个函数打断点? 使用“rb”命令,如果执行“rb”时不带参数,则表示在所有函数处打一个断点,“rb”后面可以接一个符合正则表达式的参数,用来对符合正则表达式的所有函数打断点 4) .gdbinit文件 GDB在启动时,会在用户主目录中寻找这个文件,并执行该文件中所有命令,文件格式为: define command-alias command end 如要给“b main”取一个别名“bm”: define bm b main end 此外,还可以给这个别名加上帮助说明性文字,格式为: document bm 帮助说明性文字 end 如,给“bm”别名添加帮助说明性文字: document bm break at main() function end 这样,在使用“help bm”时,GDB就会打印出“break at main() function” 5) 自定义命令 除了在.gdbinit文件自定义命令外,还可以直接在GDB运行环境定义命令,语法相同 6) 定义命令钩子 钩子用来在执行某个命令前或命令后,先执行某个或某些命令。假如想在print命令前显示一段 “----------”,则: define hook-print echo ----------/n end 注意“hook-”后接的必须是命令全称,不能是缩写。 如果想在命令执行完,再执行某个或某些命令,则: #define hookpost-print echo ----------/n end 7) GDB中循环 GDB支持 if/else/while/loop_break/loop_continue,如: (gdb) set $x=1 (gdb) while $x==1 >p $x >set $x=0 >p $x >end ----------------- b$8 = 1 ----------------- b$9 = 0转载地址:http://bssqi.baihongyu.com/