http://blog.csdn.net/augusdi/article/details/6407422
http://blog.csdn.net/zhg598242449/article/details/7591123
首先介绍一下什么叫调用堆栈:假设我们有几个函数,分别是function1,function2,function3,funtion4,且function1调用function2,function2调用function3,function3调用function4。在function4运行过程中,我们可以从线程当前堆栈中了解到调用他的那几个函数分别是谁。把函数的顺序关系看,function4、function3、function2、function1呈现出一种“堆栈”的特征,最后被调用的函数出现在最上方。因此称呼这种关系为调用堆栈(call stack)。
当故障发生时,如果程序被中断,我们基本上只可以看到最后出错的函数。利用call stack,我们可以知道当出错函数被谁调用的时候出错。这样一层层的看上去,有时可以猜测出错误的原因。常见的这种中断时ASSERT宏导致的中断。
在程序被中断时,debug工具条的右侧倒数第二个按钮一般是call stack按钮,这个按钮被按下后,你就可以看到当前的调用堆栈。
另外程序出错时你可以根据call stack的内容之后是哪个函数调用出错了。程序出现错误中断时,从调用堆栈上面往下看,双击第一个你自己的函数就可以跳转到出错的地方。
利用Call Stack窗口查看函数调用信息
Call Stack窗口能够查看当前方法的调用信息。例如方法的参数信息,调用当前方法的参数等。实例实现的是在按钮的单击事件方法内,调用自定义方法,在Call Stack窗口内可以显示调用的过程,如图1.75所示。
![]() |
图1.75 利用Call Stack窗口查看函数调用信息 |
Call Stack窗口在调试期,通过选择View→Debug Windows→Call Stack命令打开,默认情况下编译器是不会打开该窗口的。在该窗口可以查看函数调用的层次结构,这样可以辅助开发人员分析代码,了解代码的层次结构。
(1)创建基于对话框的应用程序。
(2)在头文件DebugProgramDlg.h中添加OutputResult方法。
(3)OutputResult方法的实现代码如下:
(4)在OutputResult方法内设置一处断点,按F5键进入调试状态,执行View→Debug Windows→Call Stack命令打开Call Stack窗口进行查看。
心法领悟027:Call Stack窗口的使用技巧。
Call Stack窗口只能进行查看操作,不能进行任何修改操作,但该窗口配合F11键特别有用。当开发人员在调试时按F11键时,Call Stack窗口的内容就会发生改变,注意F11键一定要在函数调用语句前按下。