【问题标题】:Live CallStack in Visual Studio 2010Visual Studio 2010 中的实时调用堆栈
【发布时间】:2011-11-22 02:03:23
【问题描述】:

是否可以制作一个“实时”调用堆栈窗口?要在应用程序运行时查看调用堆栈并自动更新?

如果能在运行我的 Web 应用程序时查看幕后发生的事情,那就太好了。

【问题讨论】:

    标签: c# visual-studio-2010 debugging callstack


    【解决方案1】:

    每个方法调用?每秒可能有数百或数千或数十万次调用堆栈更改。您无法在 Visual Studio 2010 中执行此操作。您可以暂停 Thread 对象并从中获取堆栈跟踪并输出,但性能会很糟糕(无法使用)。

    听起来您可能需要一个探查器。

    【讨论】:

      【解决方案2】:

      这在技术上是可行的,但本质上是一个无法使用的功能。在正常运行的应用程序中,调用堆栈会发生变化……每秒很容易发生数千次。 UI 根本无法以有意义的方式跟上这种吞吐量。如果它只是简单地在屏幕上绘制每个版本,那么它对你来说只会显得模糊,而且毫无用处。

      【讨论】:

      • 也许它不需要那么频繁地更新。也许只有10hz。这对于特定例程或代码行在堆栈的稳定级别上长时间处于活动状态的情况很有用。然后它们会显得有些稳定,而周围的东西只是模糊的。特别是如果它可以在 I/O 期间抽取样本,它可能会提供很多信息。
      【解决方案3】:

      我对此表示怀疑……即使它可用,那么它的更新速度也会如此之快,以至于你什么都看不到。只需将Trace 语句放在您感兴趣的函数中即可。

      Trace.WriteLine("Foo::Bar()");
      

      您可以在调试时在“输出”窗口中查看Trace 结果。如果您需要更高级的跟踪,请使用 dotTrace profiler 或任何其他 .NET 分析器。

      【讨论】:

        【解决方案4】:

        Runtime Flow(由我开发)显示了实时更新的正在运行的 .NET 应用程序的调用堆栈。您可以在调用堆栈树中看到到目前为止的所有函数调用。

        【讨论】:

          【解决方案5】:

          我有两个建议:

          1. Visual Studio 16.9 中有一个新功能,称为“用于 .NET 的新动态检测分析”

            这里有一些细节:https://devblogs.microsoft.com/visualstudio/new-dynamic-instrumentation-profiling/

          2. 有一个名为“codetack”的免费 Profiler 可以帮助 分析代码执行。如果我没记错的话,它可以显示 实时分析。 https://www.getcodetrack.com/

          【讨论】:

            猜你喜欢
            • 2011-09-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-05
            • 1970-01-01
            • 2010-11-09
            • 2012-07-24
            • 2016-10-06
            相关资源
            最近更新 更多