检测 VS 调试器何时在断点处停止?
Detecting when VS debugger is stopped at a breakpoint?
在使用 Visual Studio 2017 进行托管 .NET
调试时,是否有任何方法可以检测调试器上下文是否正在调用您的代码,即何时在断点处停止?
我相信这被称为 func-eval context (more here),它发生在您停止断点并且调试器自动调用您的代码以显示 ToString()
结果时(如果启用)在 Locals、Autos、Watch 等中的 属性 值。 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/)
在使用 Visual Studio 2017 进行托管 .NET
调试时,是否有任何方法可以检测调试器上下文是否正在调用您的代码,即何时在断点处停止?
我相信这被称为 func-eval context (more here),它发生在您停止断点并且调试器自动调用您的代码以显示 ToString()
结果时(如果启用)在 Locals、Autos、Watch 等中的 属性 值。 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/)