我正在调试模式下从Visual Studio 2012运行应用程序,
我想看看实时执行了哪些代码,这相当于做
Console.WriteLine(" command.do ... etc. ");
在每一行之后
是否可以实时查看执行了哪些代码?
我正在调试模式下从Visual Studio 2012运行应用程序,
我想看看实时执行了哪些代码,这相当于做
Console.WriteLine(" command.do ... etc. ");
在每一行之后
是否可以实时查看执行了哪些代码?
是和不是。
是的,从技术上讲,做到这一点是可行的。
不,您不会找到执行此操作的工具(当然,我不能 100% 确定什么不存在)。
这可以使用 .NET 框架提供的分析 API 来完成。一些分析器甚至宣传逐行跟踪,但这仅意味着他们将测量每一行的时间,而不是使用一些快捷方式来降低性能损失。
然而,你应该试着解释你最终想要完成的事情,而不是试图强迫自己走最短的路。
我建议你看看像 JetBrains 这样的工具。它有 10 天的免费试用期,并且可以很好地集成到 Visual Studio 中。
http://www.jetbrains.com/profiler/
这并不完全符合您的要求。但我想不出更好的了。
实时调试时,不应延迟程序。这可以使用不便宜的外部硬件来完成,例如逻辑分析仪。
与其跟踪每一行的执行,不如只跟踪一些重要行的执行。该跟踪必须非常快。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