无法正确单步执行静态构造函数中的代码(VS2019、C#、.NET 4.7.2)
Unable to properly step through code in static constructor (VS2019, C#, .NET 4.7.2)
我正在尝试在中断模式下单步执行 静态构造函数 的代码。
项目为C#/.NET 4.7.2/64-bit/WinForms。 Visual Studio 版本为 2019 16.9.4 Community。
Visual Studio 在到达静态构造函数中设置的断点时正确中断。然后我可以使用“Step Into”命令 (F11) 单步执行代码。如您所见,静态构造函数调用一个静态方法来完成繁重的工作。
该代码包含一个应迭代 10 次的循环。我应该能够逐步完成所有迭代。相反,在第一次迭代之后,调试突然跳转到——或“恢复”——在稍后的某个时间点,回到调用 class(或更准确地说,触发 CLR 的 class执行静态构造函数)。所以我无法完成剩余的 9 次迭代。
我确信所有迭代都确实执行了,因为我添加了一些调试代码以在每次执行 finally
块时打印一些内容。但是,我很沮丧,因为我无法单步执行代码。看起来像是一个可笑的 VS 错误,因为在调试时能够单步执行代码是一件非常基本的事情。
由于问题很难描述,我创建了一个动画 GIF 来直观地显示调试会话:
我在网上广泛搜索,但找不到其他人报告我遇到的这类问题。这让我想知道我是否做错了什么(例如,我是否需要调整一些调试器设置或其他什么?)。非常感谢任何帮助或见解。
更新
我无法在 32 位调试版本中重现该问题。该问题(到目前为止)仅存在于 64 位调试版本中。
如何复制
我制作了一个小型演示项目。随意下载并尝试自己调试。当遇到断点时,使用 F11 单步执行代码。看看你能不能循环 10 次 ;-)
在我这边,如果我将构建配置从 x64
更改为 Any CPU
,问题就会消失。所以这可能只是 64 位的问题。
try/finally
块似乎确实揭示了这个问题。我不确定还有哪些其他模式也能揭示这个问题。
已提交错误报告
https://developercommunity.visualstudio.com/t/The-debugger-does-not-step-through-a-met/1407274
这是 .NET 运行时中的错误。您可以在此处跟踪错误:
我正在尝试在中断模式下单步执行 静态构造函数 的代码。
项目为C#/.NET 4.7.2/64-bit/WinForms。 Visual Studio 版本为 2019 16.9.4 Community。
Visual Studio 在到达静态构造函数中设置的断点时正确中断。然后我可以使用“Step Into”命令 (F11) 单步执行代码。如您所见,静态构造函数调用一个静态方法来完成繁重的工作。
该代码包含一个应迭代 10 次的循环。我应该能够逐步完成所有迭代。相反,在第一次迭代之后,调试突然跳转到——或“恢复”——在稍后的某个时间点,回到调用 class(或更准确地说,触发 CLR 的 class执行静态构造函数)。所以我无法完成剩余的 9 次迭代。
我确信所有迭代都确实执行了,因为我添加了一些调试代码以在每次执行 finally
块时打印一些内容。但是,我很沮丧,因为我无法单步执行代码。看起来像是一个可笑的 VS 错误,因为在调试时能够单步执行代码是一件非常基本的事情。
由于问题很难描述,我创建了一个动画 GIF 来直观地显示调试会话:
我在网上广泛搜索,但找不到其他人报告我遇到的这类问题。这让我想知道我是否做错了什么(例如,我是否需要调整一些调试器设置或其他什么?)。非常感谢任何帮助或见解。
更新
我无法在 32 位调试版本中重现该问题。该问题(到目前为止)仅存在于 64 位调试版本中。
如何复制
我制作了一个小型演示项目。随意下载并尝试自己调试。当遇到断点时,使用 F11 单步执行代码。看看你能不能循环 10 次 ;-)
在我这边,如果我将构建配置从 x64
更改为 Any CPU
,问题就会消失。所以这可能只是 64 位的问题。
try/finally
块似乎确实揭示了这个问题。我不确定还有哪些其他模式也能揭示这个问题。
已提交错误报告
https://developercommunity.visualstudio.com/t/The-debugger-does-not-step-through-a-met/1407274
这是 .NET 运行时中的错误。您可以在此处跟踪错误: