有时会发生,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
语句之后,调试器转到下一个有效语句并继续按预期执行。
发生了什么?