检测 VS 调试器何时在断点处停止?

Detecting when VS debugger is stopped at a breakpoint?

在使用 Visual Studio 2017 进行托管 .NET 调试时,是否有任何方法可以检测调试器上下文是否正在调用您的代码,即何时在断点处停止?

我相信这被称为 func-eval context (more here),它发生在您停止断点并且调试器自动调用您的代码以显示 ToString() 结果时(如果启用)在 LocalsAutosWatch 等中的 属性 值。 windows,以及评估您在停止时输入的任意函数。

请注意,我知道 Debugger.IsAttached,但这不一样;它指示进程是否正在调试,无论调用时调试器是否已停止或 运行。这个问题寻求更具体的情况:Debugger.IsAttached must be true,但这还不够,因为它没有说明你是否在调试器的 func-eval 上下文。

因为这应该只是某个地方的简单全局 bool 值,我希望解决方案不涉及 COM 调用(即 ICorDebugAppDomain)。

没有。代码无法判断它是否被 func-eval 调用。一般来说,我们真的不希望代码在调试器下的行为与正常情况下的行为不同……这会导致非常难以调试的问题。

如果您试图避免 func-evals,您可以使用 DebuggerDisplay 属性。 您可以使用 Debugger.NotifyOfCrossThreadDependency() 来通知调试器中止函数评估。 (有关详细信息,请参阅 https://blogs.msdn.microsoft.com/eliofek/2012/12/12/why-do-we-get-the-function-evaluation-requires-all-threads-to-run/