从一个实例来认识GDB与高效调试(2)

好在可以通过Linux的作业管理机制,通过ctrl + z把当前任务挂起,返回终端做其他事情。通过jobs命令可以查看当前shell有哪些任务。比如,当我暂停GDB时,jobs显示我的VIM编辑器进程与GDB目前都处于挂起状态。

从一个实例来认识GDB与高效调试

以下是些相关的命令,比较常用

fg %1  // 打开VIM,1是VIM对应的作业号 fg %2 // 打开GDB bg %1 // 让VIM到后台运行 kill %1 && fg // 彻底杀死VIM进程

GDB的“在线刷新”

好了,刚才介绍了无缝切换,那我们可以在不关闭GDB的情况下(注意,ctrl + z不是关闭GDB这个进程,只是挂起)切换到VIM中去修改代码来消除死循环(把第24行的“if (num_y = 0)" 改成"if (num_y == 0)")。动作序列可以是:

ctrl + z // 挂起GDB jobs // 查看VIM对应的作业号,假设为1 fg %1 // 进入VIM,修改代码.. ctrl + z // 修改完后挂起VIM gcc -g -Wall -o insert_sort a.cpp // 重新编译程序 fg %2 // 进入GDB,假设GDB的作业号为2

现在,我们又返回GDB调试界面了!但在调试前还有一步,如何让GDB识别新的程序(因为程序已经重新编译)?只要再次运行run就可以了。因为GDB没有关闭,所以之前设置的断点、运行run时传入的命令行参数等还保留着,不需要重新输入。很好用吧!

从一个实例来认识GDB与高效调试

GDB自动检测到程序发生改变,重新加载符号。

其他bug

关于本例中的其他bug,这里就不多说了。有兴趣的同学,可以和我讨论。

GDB调试程序用法

GDB+GDBserver无源码调试Android 动态链接库的技巧

使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境)

Ubuntu上用GDB调试printf源码

Linux下用GDB调试可加载模块

强大的C/C++ 程序调试工具GDB 

使用GDB命令行调试器调试C/C++程序

GDB调试命令总结 

GDB调试工具入门 

GDB 的详细介绍请点这里
GDB 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/57e0d1151d91e518b8f9486d40ee5614.html