GDB工具使用教程_函数调用栈(call stack)探密
来源:互联网 发布:windows查看内存型号 编辑:程序博客网 时间:2024/05/22 07:43
我们知道,通常一个程序的运行,不外乎是A函数调用B,B函数调用C等等,等所有的调用都完成后,整个程序的运行也就ok了。在这个过程中,每当有新的函数调用,系统都会把该函数的一些信息,包括函数的参数,以及一些寄存器的值等,保存到调用栈(call stack)上。等该函数运行完成后,这些信息再从调用栈上弹出(pop)。如下图所示,是一个完整的调用栈:
在上图中,整体叫做调用栈(call stack),每一行叫做一桢(frame)。我们来看看桢信息的组成有哪些:
这里还有一点需要说明,不知道细心的读者朋友有没有发现,foo那一桢没有PC的地址,GDB通过这样来标示该桢是当前正在执行到的桢,因此我们通过看调用栈的信息,便可得知程序执行到哪里了。
读者朋友有没有觉得原来函数调用的过程还有这么多信息可以知道啊,下面我就开始介绍一些GDB命令,通过这些命令你便可以查看到上面介绍的这些信息,甚至更加详细的信息。
1. 查看调用栈信息:(具体信息的内容,与上面第二部分中介绍的相同)
2. 查看桢信息:
3. 查看更加详细的信息:
查看指定桢的详细信息,关于详细信息的内容,这里有必要做一个介绍,如下图所示:
上图中显示的信息有:
a. 当前桢的地址: 0xbffff400
b. 当前桢PC: eip = 0×8048516
c. 当前桢函数: bar (test.cpp:16)
d. caller(调用者)桢的PC: saved eip 0×8048535
e. caller桢的地址: called by frame at 0xbffff420
f. callee(被调用者)桢的地址: caller of frame at 0xbffff3e0
g. 源代码所用的程序的语言(c/c++): source language c++
h. 当前桢的参数的地址及值: Arglist at 0xbffff3f8, args: name=0×8048621 “jessie”, myname=0x804861c “jack”
i. 当前相中局部变量的地址:Locals at 0xbffff3f8, Previous frame’s sp is 0xbffff400
k. 当前桢中存储的寄存器: Saved registers: ebp at 0xbffff3f8, eip at 0xbffff3fc
from:http://www.wuzesheng.com/?p=1409
- GDB工具使用教程_函数调用栈(call stack)探密
- gdb 调用栈 (call stack)
- 手把手教你玩转GDB(四)—函数调用栈(call stack)探密
- 手把手教你玩转GDB(四)——–函数调用栈(call stack)探密
- 函数调用栈(Function call stack)
- 函数的调用机制_用递归实现栈(Function call machenism_Recursive calls stimulate stack)
- 调用栈 (Call Stack)
- 使用call命令在GDB中重复调用某函数
- Get gdb call stack
- GDB工具使用教程_基本调试指令
- gdb调试(四)函数调用栈—stack
- 小览call stack(调用栈) (一)
- 小览call stack(调用栈) (一)
- 利用Call Stack窗口查看函数调用信息
- OllyDbg完全教程 复制到剪切板[Copy to clipboard] 调用栈[Call stack] 调用树[Call tree]
- GDB调试工具使用教程(博客)
- gdb查看函数调用栈
- 程序调试的时候利用Call Stack窗口查看函数调用信息
- Android Studio使用教程-菜单(Edit)
- 搜索引擎
- 状态模式的具体实现 情景二
- sticklistview
- UI-事件处理
- GDB工具使用教程_函数调用栈(call stack)探密
- Android:带边框的,等比缩放的,铺满控件的ImageView
- 怎样利用模板拼接字符串
- i.MX 6Q开发环境配置
- 画虚线需要设置android:layerType="software",否则无效
- Swift之 ? 和 !
- Codevs P1652 淘汰赛制
- 序列化生成XML文件以及Pull解析
- Spark RDD transformation操作