デバッグ方法とテクニック(zz)
デバッグしやすいコードスタイル:は、グローバル変数 を用いない.すべての変数を初期化し、構成関数においてメンバ変数を初期化する .はできるだけconst を使います.詳細な注釈 VC+コンパイルのオプション:はいつも/W 4警告レベル を使用します.デバッグバージョンでは常に/GZコンパイルオプションを使用して、Releaseバージョンでしかないエラーを発見するために使用されます. 警告なしのコンパイル:コンパイル後には警告がないことを保証しますが、警告をなくす前に慎重にチェックします.
デバッグ方法:
1、アスリートを使う(原則:できるだけ簡単にする)
astertはdebugでのみ有効です.releaseではコンパイルされません.
例:
例:
以下の例はdebugにしか表示されません.
例:
a)、TRACE
c)、afxDump
5、エラー情報をファイルに記録する
異常処理
プログラム設計時には異常を考慮してどのように処理しますか?エラーが発生したら、簡単にエラーを報告してプログラムを終了してはいけません.できるだけエラーの前の状態に回復したり、プログラムを初めから実行させたりして、いくつかのエラーに対しては、エラーの存在を許すべきですが、プログラムは正常にタスクを完了することができます.
デバッグテクニック
1、VC++中F 5でデバッグ運転を行います.
a)、output DebugウィンドウでTRACEで印刷された情報を見ることができます.
b)、Call Stockウィンドウでは、プログラムの呼び出しスタックが見られます.
2、Debugバージョンの運行時に崩壊が発生し、retryを選んでデバッグし、Call Stockを見てエラーの位置と原因を分析する.
3、マッピングファイルでデバッグする
a)マッピングファイルを作成する:Project settingsのlink項目、Generate mapfileを選択して、プログラムコードアドレスを出力する:/MAPINFO:LINE、引出し番号を得る:/MAPINFO:EXPORTS.
b)プログラムのリリース時は、モジュールのマッピングファイルをすべて保存するべきです.
c)マッピングファイルを見てください.「参照」は、崩壊した住所からソースコードのエラー行を探し出します.
4、デバッグ可能なReleaseバージョン
Project settingsの中でC++項のDebug InfoはProgram Databaseとして選択して、Link項のDebugの中でDebug InfoとMicrosoft formatを選択します.
5、APIのエラーコードを確認し、watchウィンドウに@errを入力すると、確認または@err、hrができます.そのうち、hrはエラーコードの説明を表します.
6、Set Next Sttement:この機能は指定されたコードラインに直接ジャンプして実行できます.普通は異常処理のコードをテストします.
7、デバッグメモリ変数の変化:メモリが変化したら停止します.
よくあるエラー
1、関数が戻った時にプログラムが崩壊する原因
a)自動変数の書き込みがオフになっています.
b)、関数の原型が一致しない
2、MFC
a)エラーの関数プロトタイプを使ってユーザー定義メッセージを処理する
正しい関数の原型は以下の通りです.
4、_を使うBeginnthreadexは、Create Threadを使用しないでください.
デバッグ方法:
1、アスリートを使う(原則:できるだけ簡単にする)
astertはdebugでのみ有効です.releaseではコンパイルされません.
例:
char* strcpy(char* dest,char* source)
{
assert(source!=0);
assert(dest!=0);
char* returnstring = dest;
while((*dest++ = *source++)!= ‘\0’)
{
;
}
return returnstring;
}
2、防御的なプログラミング例:
char* strcpy(char* dest,char* source)
{
if(source == 0)
{
assert(false);
reutrn 0;
}
if(dest == 0)
{
assert(false);
return 0;
}
char* returnstring = dest;
while((*dest++ = *source++)!= ‘\0’)
{
;
}
return returnstring;
}
3、Traceを使用する以下の例はdebugにしか表示されません.
例:
a)、TRACE
CString csTest = “test”;
TRACE(“CString is %s
”,csTest);
b)、ATLTACEc)、afxDump
CTime time = CTime::GetCurrentTime();
#ifdef _DEBUG
afxDump << time << “
”;
#endif
4、GetLastErrerで戻り値を検出し、エラーコードを得ることでエラーの原因を分析する5、エラー情報をファイルに記録する
異常処理
プログラム設計時には異常を考慮してどのように処理しますか?エラーが発生したら、簡単にエラーを報告してプログラムを終了してはいけません.できるだけエラーの前の状態に回復したり、プログラムを初めから実行させたりして、いくつかのエラーに対しては、エラーの存在を許すべきですが、プログラムは正常にタスクを完了することができます.
デバッグテクニック
1、VC++中F 5でデバッグ運転を行います.
a)、output DebugウィンドウでTRACEで印刷された情報を見ることができます.
b)、Call Stockウィンドウでは、プログラムの呼び出しスタックが見られます.
2、Debugバージョンの運行時に崩壊が発生し、retryを選んでデバッグし、Call Stockを見てエラーの位置と原因を分析する.
3、マッピングファイルでデバッグする
a)マッピングファイルを作成する:Project settingsのlink項目、Generate mapfileを選択して、プログラムコードアドレスを出力する:/MAPINFO:LINE、引出し番号を得る:/MAPINFO:EXPORTS.
b)プログラムのリリース時は、モジュールのマッピングファイルをすべて保存するべきです.
c)マッピングファイルを見てください.「参照」は、崩壊した住所からソースコードのエラー行を探し出します.
4、デバッグ可能なReleaseバージョン
Project settingsの中でC++項のDebug InfoはProgram Databaseとして選択して、Link項のDebugの中でDebug InfoとMicrosoft formatを選択します.
5、APIのエラーコードを確認し、watchウィンドウに@errを入力すると、確認または@err、hrができます.そのうち、hrはエラーコードの説明を表します.
6、Set Next Sttement:この機能は指定されたコードラインに直接ジャンプして実行できます.普通は異常処理のコードをテストします.
7、デバッグメモリ変数の変化:メモリが変化したら停止します.
よくあるエラー
1、関数が戻った時にプログラムが崩壊する原因
a)自動変数の書き込みがオフになっています.
b)、関数の原型が一致しない
2、MFC
a)エラーの関数プロトタイプを使ってユーザー定義メッセージを処理する
正しい関数の原型は以下の通りです.
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);
3、Terminate Threadを慎重に使う:Terminate Threadを使うと資源が漏れてしまいます.万やむを得ず、使用しないでください.4、_を使うBeginnthreadexは、Create Threadを使用しないでください.