GDB 调试的一些技巧

先放几个讲 GDB 调试的演讲,外国的技术演讲都非常的干活,直接上代码,现场教学那种。都是在 CppCon 这个技术会议上的演讲内容,唯一不足的就是可能对听力有点考验 233333

https://www.youtube.com/watch?v=V1t6faOKjuQ
https://www.youtube.com/watch?v=-n9Fkq1e6sg

GDB 可以算是一个古董级别的应用了,基本上在 Linux 平台的 C/C++ 程序调试都在使用他,方法无非是通过 CLion 进行远程调试还是直接用 GDB 进行调试。

调试是一个非常有学问,也是一个经验工程。不同的人调试对同一个错误进行调试,老司机可能很快就发现了 Bug,而新手往往进度缓慢。关于调试的书籍,有一个方法论的书叫做 《调试九法》 。从方法论的角度上,讲解了调试的一些经验。

下面就是一些个人经常用到的 GDB 调试的技巧,有的可能非常基础,但是能省很多精力。

  1. display 命令
    每次暂停都会自动打印出想要看到的变量,可以理解为自动化的 print 命令,非常的好用。

  2. break where if 命令
    针对某一个断点,可能你不是需要时时刻刻关注他,又或者希望运行到一定程度之后才开始单步执行,那么你可以在 break 的命令上加上条件,where if 后面加上条件,可以让程序在条件满足的情况下进入断点,

  3. gdb 可以使用命令行,或者 command 命令
    在进行 gdb 交互的时候,你甚至可以用来跑 python,或者直接运行 shell 脚本。command 命令作用很简单,command 后面加 breakpoint 号,可以让你在运行到指定断点的时候,自动执行输入的命令。可以理解为没有感情的自动化命令输入。

  4. gdb --args
    如果你的程序在运行的时候需要参数,那么你可以在调用 gdb 的时候,指定 --args 后面加上运行的程序和对应的参数,这样在再次运行程序的时候,就不用输入参数了,可以节省大量的时间。

  5. 调试宏
    黑科技,GDB 甚至可以用来调试宏。我们知道宏展开大概是在编译中的预处理阶段,编译器在进行变量替换的时候,同时也会将宏进行相应的处理。如果你想看到宏展开之后的文件,可以在 gcc 编译的时候,使用 -P 命令,输出宏展开之后的文件。
    而如果你想要直接调试宏,那么就在编译的时候使用 -ggdb3 命令。这样我们就可以直接进行宏的调试了。也可以像调用函数一样,直接调用宏,不过需要在宏的名称前面加上 macro,显示声明一下。

posted @ 2020-01-04 20:44  wAt3her  阅读(374)  评论(0编辑  收藏  举报