程序调试的时候利用Call Stack窗口查看函数调用信息

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方法的实现代码如下:


  1. void CDebugProgramDlg::OutputResult()  
  2. {  
  3. CString strResult;  
  4. int iResult=0;  
  5. //添加代码开始  
  6. char *str = new char[100];                  //定义字符串变量  
  7. strcpy(str,"Hello World!");                 //给字符串赋值  
  8. int s,a,b;                          //定义整型变量  
  9. a = 5;                              //赋初值  
  10. b = 10;  
  11. s = a + b;                          //求和  
  12. strResult.Format("%s/r/n%d",str,s);  
  13. GetDlgItem(IDC_ED_RESULT)->SetWindowText(strResult);  
  14. }  

(4)在OutputResult方法内设置一处断点,按F5键进入调试状态,执行View→Debug Windows→Call Stack命令打开Call Stack窗口进行查看。

心法领悟027:Call Stack窗口的使用技巧。

Call Stack窗口只能进行查看操作,不能进行任何修改操作,但该窗口配合F11键特别有用。当开发人员在调试时按F11键时,Call Stack窗口的内容就会发生改变,注意F11键一定要在函数调用语句前按下。

你可能感兴趣的:(C++基础知识)