C/C++コードをステップ実行していて、失敗したWin32 APIを呼び出したところです(通常、0などの役に立たない一般的なエラーコードを返します)。コードは、後続のGetLastError()呼び出しを行いません。その戻り値は、さらにエラー情報を調べることができます。
失敗を再コンパイルして再現せずにエラー値を取得するにはどうすればよいですか?ウォッチウィンドウに「GetLastError()」と入力しても機能しません(「構文エラー」)。
数回述べたように、@err
疑似レジスタは最後のエラー値を表示し、@err,hr
はエラーを文字列として表示します(可能な場合)。
VisualStudioチームのメンバーであるAndyPennellによると、VS 7(Visual Studio .NET 2002)以降、疑似レジスタを示すために「@」文字を使用することは非推奨です-彼らは「$」を使用することを好みます($err,hr
のように) )。当面は$と@の両方がサポートされます。
条件付きブレークポイントで$ err疑似レジスタを使用することもできます。したがって、最後のエラーがゼロ以外の場合にのみ、コード行を中断できます。これは非常に便利なトリックになる可能性があります。
便利なその他の疑似レジスタ(John Robbinsの著書、 "Debugging Applications for Microsoft .NET and Microsoft Windows" ):
$tib
-スレッド情報ブロックを表示します$clk
-クロックカウントを表示します(タイミング機能に役立ちます)。これをより簡単に使用するには、$clk
時計を配置してから、追加の$clk=0
時計を配置します。 2番目のウォッチは、現在の値の表示後に疑似レジスタをクリアするため、次のステップまたはステップオーバーでは、そのアクションの時間のみが与えられます。これは、かなりのデバッガオーバーヘッドを含む大まかなタイミングですが、それでも非常に役立つ場合があることに注意してください。ERR,hr
ウォッチウィンドウでは、通常、トリックを行います
「編集して続行」してコードを追加すると、エラーが表示されます(保存するための新しいグローバル変数を作成しないでください)。この種のエラー処理コードを実行する既存の関数をすばやく呼び出すことができれば、非常にうまく機能します。
ボーナスとして、将来のために新しいコードをそこに残すこともできます。
これができない場合は、QBziZが「ERR、hr」で正しく実行されます。