gpt4 book ai didi

c# - 是否可以确定当前线程是否为 "debugger"?

转载 作者:行者123 更新时间:2023-11-30 17:03:45 24 4
gpt4 key购买 nike

在 visual studio 中调试代码时,如果将鼠标悬停在某个属性上,将执行该属性的主体。当该代码正在执行时,是否可以确定它是由于调试器而不是由于正常代码执行而被执行的?

明确地说,我不是在寻找 Debugger.IsAttached。我正在寻找可以命名为“Debugger.IsPaused”的东西。有没有这样的东西?

我希望查看 CurrentThread 会发现一些东西,比如被命名为“调试器线程”或具有有意义的 ManagedThreadID,但线程未命名且托管线程 ID 并不特殊。

最佳答案

您无法查明您的进程是否在调试器中停止,主要是因为您的代码未被执行。

对于调试器 (Visual Studio) 中表达式值求值的特殊情况 - 会发生以下情况:进程的事件调试器线程被调试器劫持,然后执行 Visual Studio 表达式求值器生成的一些代码通过你的帖子。评估完成后,您的线程再次停止,其状态与评估前一样保持不变。这个过程称为“funceval”。理论上,您可以通过某种方式分析函数中的调用堆栈跟踪,以查明它是否正在通过 funceval 调用,但我怀疑由于 CLR 调试器的非托管性质,这几乎不可能。

您可以在 Mike Stall 综合 CLR 调试博客的相应类别中阅读更多关于 funceval 的内容:http://blogs.msdn.com/b/jmstall/archive/category/11475.aspx

关于c# - 是否可以确定当前线程是否为 "debugger"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com