プログラムデバッグ時にCall Stackウィンドウで関数呼び出し情報を表示する

2234 ワード

http://blog.csdn.net/augusdi/article/details/6407422
http://blog.csdn.net/zhg598242449/article/details/7591123
まず、呼び出しスタックとは何かを紹介します.function 1、function 2、function 3、funtion 4、function 1がfunction 2、function 2がfunction 3、function 3がfunction 4を呼び出します.function 4の実行中に、スレッドの現在のスタックから、彼を呼び出すいくつかの関数がそれぞれ誰なのかを知ることができます.関数の順序関係を見ると,function 4,function 3,function 2,function 1は「スタック」の特徴を示し,最後に呼び出された関数は最上位に現れる.したがって、この関係を呼び出しスタック(call stack)と呼ぶ.障害が発生した場合、プログラムが中断されると、最終的にエラーが発生した関数しか表示されません.call stackを使用すると、エラー関数が誰に呼び出されたかを知ることができます.このような層の見た目は、時には間違いの原因を推測することができる.一般的なこのような割り込み時のASSERTマクロによる割り込み.プログラムが中断されると、debugツールバーの右側の最後から2番目のボタンは一般的にcall stackボタンで、このボタンが押されると、現在の呼び出しスタックが表示されます.
また、プログラムエラーが発生した場合、call stackの内容の後にどの関数がエラーを呼び出したかに基づいてエラーを呼び出すことができます.プログラムにエラー割り込みが発生した場合、呼び出しスタックの上から下を見て、最初の関数をダブルクリックするとエラーの場所にジャンプできます.
Call Stackウィンドウでの関数呼び出し情報の表示
Call Stackウィンドウでは、現在のメソッドの呼び出し情報を表示できます.たとえば、メソッドのパラメータ情報、現在のメソッドを呼び出すパラメータなどです.例は、図1.75に示すように、ボタンのクリックイベントメソッド内でカスタムメソッドを呼び出し、Call Stackウィンドウ内で呼び出しのプロセスを表示することを実現する.
 
 
図1.75 Call Stackウィンドウによる関数呼び出し情報の表示
Call Stackウィンドウは、デバッグ時に、View→Debug Windows→Call Stackコマンドを選択して開くことで、デフォルトではコンパイラは開きません.このウィンドウでは、関数呼び出しの階層を表示できます.これにより、開発者がコードを分析し、コードの階層を理解するのを支援できます.
(1)ダイアログベースのアプリケーションを作成する.
(2)ヘッダファイルDebugProgramDlg.hにOutputResultメソッドを追加します.
(3)OutputResultメソッドの実装コードは以下の通りである.
void CDebugProgramDlg::OutputResult()  
{  
CString strResult;  
int iResult=0;  
//コード追加開始char*str=new char[100];//文字列変数の定義
strcpy(str,"Hello World!");//文字列にを割り当てる
int s,a,b;//整数変数を定義する
a=5;//賦初値b = 10;  
s=a+b;//求和strResult.Format("%s/r/n%d",str,s);  
GetDlgItem(IDC_ED_RESULT)->SetWindowText(strResult);  
}  
(4)OutputResultメソッド内にブレークポイントを設定し、F 5キーを押してデバッグ状態に入り、View→Debug Windows→Call Stackコマンドを実行してCall Stackウィンドウを開いて表示する.
心法悟り027:Call Stackウィンドウの使い方.
Call Stackウィンドウは表示操作のみで、変更操作は一切できませんが、このウィンドウはF 11キーに合わせて特に便利です.開発者がデバッグ時にF 11キーを押すと、Call Stackウィンドウの内容が変わります.F 11キーは必ず関数呼び出し文の前に押してください.