【问题标题】:Detect Attached Profiler检测附加的探查器
【发布时间】:2012-08-15 10:52:45
【问题描述】:

我知道您可以使用System.Diagnostics.Debugger.IsAttached 确定是否附加了调试器,但是有没有办法确定是否附加了探查器?

我的分析器无法通过线程池跟踪任务,所以我想在分析时自动禁用并行性。

【问题讨论】:

  • 您使用哪个分析器?我不知道通用解决方案,但可能有一个特定于分析器的解决方案。
  • 我目前正在使用 SlimTune,因为它的设置非常简单。

标签: c# .net windows profiling


【解决方案1】:

对于标准分析器接口,需要设置环境变量。

我想你可以通过 Environment 类检查这个。

变量名为COR_ENABLE_PROFILING,如果启用,将设置为1

【讨论】:

  • 谢谢,这正是我所需要的!
【解决方案2】:

无论是调试版本还是发布版本,都包含 Debugger.IsAttached 代码。并且可以将调试器附加到发布版本。

因此,如果没有附加调试器(或分析器),System.Diagnostics.Debugger.IsAttached 将返回 False。

注意:我不确定 SlimTune 但您倾向于附加到流程的 Profilers:How to: Attach and Detach the Profiler to Running Processes

【讨论】:

  • 很好……但没有回答我的问题。 Debugger.IsAttached 响应调试器而不是分析器。
  • +1 np 的 Leppie 看起来不错。所以要确认Debugger.IsAttached 在 SimeTune 进行分析时没有任何影响?不知道为什么要在没有并行性的情况下进行分析 - 结果会出现偏差,例如在调试模式下进行分析
  • 你是对的 - 当 SlimTune 采样时 IsAttached 返回 false。我对并行性的使用主要是在线程池上运行独立的任务和子任务——我喜欢能够看到函数调用的严格层次结构。
【解决方案3】:

对于那些感兴趣的人,您似乎可以通过检查 DIAGHUB_SESSION_ID 环境变量的存在来检测您的进程是否正在由 Visual Studio 的诊断中心(至少在 Visual Studio 2017 中)进行分析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多