【发布时间】:2013-05-23 10:10:24
【问题描述】:
有时,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 语句之后,调试器转到下一个有效语句并继续按预期执行。
发生了什么?
【问题讨论】:
-
仅供参考:当您要回答自己的问题时,显示屏底部附近有一个“回答您自己的问题”复选框。我认为这会阻止人们介入并回答它。
-
是的,我忘记了 :) 谢谢。
标签: c# visual-studio debugging compiler-construction