時々、Visual Studio デバッガーが無効な現在の命令を表示することがあります。考えられる最も単純な理由は次のとおりです。
- 古い .pdb ファイル。これらのファイルには、バイナリ ファイルのどのオフセットがどのコード行に対応するかに関する情報が含まれています。これらのファイルが古い場合、明らかにデバッガーは無効な行を表示します。
- デバッグではなくリリース モードでコンパイルされたプログラム。リリース モードでは通常、最適化がオンになっているため、オプティマイザーはコードをより高速 (またはより小さく) に変更できます。このような場合、バイナリ ファイルはソース コードに対応しなくなるため、デバッガーは実際に実行された行を表示できません。
しかし、私の場合は違いました。ソース コード (C#) の一部を次に示します。
if (match.Groups.Count != 4)
throw new InvalidOperationException("Internal error: Invalid regular expression!");
MyEnum myEnum;
try
{
// (...)
ソースをデバッグしました。デバッガーは条件ステートメントで停止し、match.Groups.Count
実際には 4 に等しいことが示されました。明らかに、throw ステートメントはスキップされるべきでしたが、驚くべきことに、そうではありませんでした。ただし、ステートメントを「実行」した後throw
、デバッガーは次の有効なステートメントに移動し、想定どおりに実行を続けました。
どうしたの?