1

我正在调试模式下从Visual Studio 2012运行应用程序,

我想看看实时执行了哪些代码,这相当于做

Console.WriteLine(" command.do ... etc. "); 

在每一行之后

是否可以实时查看执行了哪些代码?

4

3 回答 3

2

是和不是。

是的,从技术上讲,做到这一点是可行的。

不,您不会找到执行此操作的工具(当然,我不能 100% 确定什么不存在)。


这可以使用 .NET 框架提供的分析 API 来完成。一些分析器甚至宣传逐行跟踪,但这仅意味着他们将测量每一行的时间,而不是使用一些快捷方式来降低性能损失。

然而,你应该试着解释你最终想要完成的事情,而不是试图强迫自己走最短的路。

于 2012-10-08T20:10:29.380 回答
0

我建议你看看像 JetBrains 这样的工具。它有 10 天的免费试用期,并且可以很好地集成到 Visual Studio 中。

http://www.jetbrains.com/profiler/

这并不完全符合您的要求。但我想不出更好的了。

于 2012-10-08T22:13:29.883 回答
0

实时调试时,不应延迟程序。这可以使用不便宜的外部硬件来完成,例如逻辑分析仪。

与其跟踪每一行的执行,不如只跟踪一些重要行的执行。该跟踪必须非常快。Visual Studio 的跟踪太慢了,并且阻塞了调用 Trace 的第二个线程,这是实时调试中的一大禁忌。

幸运的是,编写自己的内存跟踪很容易,这只会导致微秒延迟并且是非阻塞的:

const int maxMessages = 0x100;
const int indexMask = maxMessages-1;
string[] messages = new string[maxMessages];
int messagesIndex = -1;

public void Trace(string message) {
  int thisIndex = Interlocked.Increment(ref messagesIndex) & indexMask;
  messages[thisIndex] = message;
}

对于这种方法的更详细描述,它还收集线程和计时信息并很好地输出跟踪,位于:CodeProject:实时调试多线程代码1

于 2016-06-17T16:10:02.387 回答