五个 Linux 下用户空间的调试工具(3)

每当程序停止,任何人想明白的第一件事就是它为什么停止,以及怎么停在那里的。该信息被称为反向跟踪。由程序产生每个函数调用和局部变量,传递的参数,调用位置等信息一起存储在堆栈内的数据块种,被称为一帧。我们可以使用GDB来检查所有这些数据。 GDB从最底层的帧开始给这些帧编号。

bt: 打印整个堆栈的回溯

bt 打印n个帧的回溯

frame : 切换到指定的帧,并打印该帧

up : 上移'n'个帧

down : 下移'n'个帧 ( n默认是1)

检查数据:

程序的数据可以在里面GDB使用'print'命令进行检查。例如,如果'x'是调试程序内的变量,'print x'会打印x的值。

检查源码:

源码可以在GDB中打印。默认情况下,'list'命令会打印10行代码。

list : 列出'linenum'行周围的源码

list : 从'function'开始列出源码

disas : 显示该函数机器代码

停止和恢复程序:

使用GDB,我们可以在必要的地方设置断点,观察点等来停止程序。

break : 在'location'设置一个断点。当在程序执行到这里时断点将被击中,控制权被交给用户。

watch : 当'expr'被程序写入而且它的值发生变化时GDB将停止

catch : 当'event'发生时GDB停止

disable : 禁用指定断点

enable : 启用指定断点

delete : 删除 断点/观察点/捕获点。 如果没有传递参数默认操作是在所有的断点

step: 一步一步执行程序

continue: 继续执行程序,直到执行完毕

退出 GDB:

用'quit'命令还从GDB中退出。

GDB还有更多的可用选项。里面GDB使用help选项了解更多详情。

getting help within gdb

在GDB中获得帮助

总结

在这篇文章中,我们已经看到不同类型的Linux用户空间的调试工具。总结以上所有内容,如下是什么时候使用该什么的快速指南:

基本调试,获得关键变量 - print 语句

获取有关文件系统支持,可用内存,CPU,运行程序的内核状态等信息 - 查询 /proc 文件系统

最初的问题诊断,系统调用或库调用的相关问题,了解程序流程 – strace / ltrace

应用程序内存空间的问题 – valgrind

检查应用程序运行时的行为,分析应用程序崩溃 – gdb

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

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