![](https://csdnimg.cn/release/download_crawler_static/86299625/bg3.jpg)
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
8,disassemble(disass)命令:是反汇编命令,可以对具体的函数进行反汇编。
disassemble function_name:查看函数 function_name 对应的汇编代码;
添加/r 选项,即( gdb) disassemble /r function_name:在 前述基础上增加显示机器码;
添加/m 选项,即(gdb) disassemble /m function_name:在前述基础上增加显示源码
(源码是 C 语句则显示 C 代码,源码是汇编语句则显示汇编代码);
也可以同时添加/rm 选项;
9,display 命令:跟踪查看某个变量,每次单步停下来都显示该变量当前的值。 undisplay 命
令则是取消跟踪观察变量。
10,watch 命令: 监视变量值的变化。当被设置的观察点变量发生变化时,打印显示!
与 display 命令一直显示某个变量的值的方式相比,用 watch 命令只显示变量值的变化情
况,如果变量值不变则不显示,调试效率要高很多。
11,file 命令:在当前程序运行完毕退出之后,可以使用 file 命令重新载入待调试程序,重
新进行调试。典型格式是:file executablefilenam。
12,kill 命令:终止当前的调试过程;
13,backtrace(bt)命令:查看当前函数及其被调用的信息
backtrace 命令是依据进程栈里保存的函数返回地址来显示函数间调用关系的,可以用
于回溯函数调用栈。如果 bt 命令下所显示的某些函数不正确或者出现段错误,则可以认为
是栈被破坏了,还可以看到是在哪个函数的调用处产生的段错误。
线程间的冲突是导致进程栈被破坏的原因之一。举一个例子来展示栈被破坏的过程:如
下图所示,在线程间的数据处理上传递了栈的指针,导致了其他线程向该地址写入了数据。
而这个其他线程向栈内写入数据的操作被推迟了,推迟后的写操作写入了一个其它线程的栈
空间,从而导致了栈破坏
正常时,应用程序行为如下:
问题时,应用程序的行为如下: