斯坦佛编程教程-Unix编程工具(三)

网友投稿 490 2022-09-23

斯坦佛编程教程-Unix编程工具(三)

斯坦佛编程教程-Unix编程工具(三)

list linenum 打印源文件中以linenum为中心的10行代码。

list function   打印方法开始附近的10行代码。

list    打印下面10行代码。

list命令会打印出源文件中以当前行为中心的代码行,如果在emacs中使用gdb的这些命令就太老土了。

检查数据

如果要回答“这些变量的值事什么?”,那么你应该使用下面的命令...

print expression    打印表达式的值,表达式是一个有效的c表达式,能够包括方法调用和算数表达式,以及当前栈帧的所有的变量。

set variable=expression    将变量的值设置成表达式所表示的值。你可以设置当前范围内的所有的变量的值。所有以$开头的变量都可以用作gdb的临时变量。

display expression    在程序运行到停止的时候打印表达式的值,在你一步步运行程序的时候,如果你想查看变量的值,这些会非常有用。

undisplay    取消之前的display命令请求。

在gdb中,有两种方式来显示变量的值:显示一次当前变量的值或是持续显示变量整个生命周期的值。print命令将会打印当前变量的值,而display命令将会让调试器在程序运行的每一步都打印变量的值,只要变量还存在。目标值是用c语法来区分的,例如...

print x.y[3]

将会打印x结构体中名为y的数组的第四个变量值。那些可以访问的变量存在于当前方法的活动帧,还有全局变量和静态变量。print和display都可以用来打印任意的复杂表达式,甚至是那些包含有方法调用的表达式。但是如有一个方法有副作用,那么你可得注意了。

缩写

最后,我们可以更简单的去使用gdb,那就是所有的命令都可以用缩写,这样你就不必每次都打全命令了。一个命令的缩写就是在不引起歧义的情况下用尽量少的字母来替代命令,一些特殊的命令break,delete,run,continue,step,next,print,你在使用的时候就只需要用首字母就行了。另外,你最后输入的命令只要按一下return键就又可以出现了。这在单步调试的时候查看变量的值将会非常的有用。

更多的命令 editmode mode 设置gdb的命令行模式。mode的值可以是emacs, vi, dumb. shell command  像在终端运行程序一样运行完剩下的程序。 history 打印出使用过的命令历史。 调试策略 一些人因为他们不想去学习另外的工具而不去使用调试器,这是错误的!花上一些时间来学习使用一个调试器和他的特性,这将让你在排除困难的时候更有效率。 很多时候bug会导致程序的崩溃(或者是“内核崩溃”,“注册机崩溃”等等。),然后你的程序就挂在那,只留下如“片中断”之类的提示。如果你的程序也会这样崩溃,那么调试器就可已截获到程序的信号,这些信号包含着它所发现的错误,并且允许你检查程序的状态。这样你花不了多大的力气,调试器就能显示出程序在崩溃的时候的状态。 通常情况下,bug不会引起程序很明显的崩溃,而是产生一些内部出问题的征兆。在这种情况下,一种技术就是在程序运行不正常的地方设置一个断点,然后通过观察堆栈调用的情况来获得一些数据,然后控制程序到坏的状态里。另一种技术就是在问题开始之前设置一些断电,然后一步步接近问题,时刻检查程序运行的状态。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:斯坦佛编程教程-Unix编程工具(四)
下一篇:10个实用并很有意思的Python小技巧
相关文章

 发表评论

暂时没有评论,来抢沙发吧~