家谈VS 2010新的“IntelliTrace”功能
业内人士Dan Wahlin在Dr. Dobb's播客网站发表文章称,他日前在拉斯维加斯举行的Visual Studio 2010发布仪式上发表讲话,并且有机会遇见了他的好朋友Ward Bell。Bell是IdeaBlade公司副总裁并且是Scott Guthrie演讲时的演示者之一。他发现了一个名为“IntelliTrace”(智能跟踪)的功能 ,提供了一种在调试进程中捕捉信息的方法。Wahlin坐下来和Bell简单地聊了有关“IntelliTrace”能够向.NET开发人员提供什么功能的事情。
Wahlin问:告诉我有关IntelliTrace的事情
Bell答:IntelliTrace是建在Visual Studio 2010中的一个几极好的历史性的新的调试工具。你可以把它想象为一种时间机,你可以在应用程序运行的时候记录你的应用程序的事件,让通过这个调试工具在时间上向后移动和向前移动。
问:你什么时候使用它?
答:你曾经遇到过一种像《滑坡与梯子》游戏式代码库吗?这种代码库中的一件事情可导致另一件事情的发生,另一件事情会导致下一件事情的发生,而你不知道到底在发生什么事情。当你有一个应用程序有许多松散耦合的组件,并且所有这些组件都是采用依赖注入方式创建的时候,这个问题很难处理的。你不能做静态分析,因为它都是动态的,没有任何事情是指向任何事情的。你今天要做什么?你放置许多断点,你走进去,你走过一些点,并且继续走着,哦,我要向回走--我从哪里来的?
因此,当你开始的时候你就要设法记住在适当的点上停留。IntelliTrace允许你重放在应用程序运行时到底发生了什么事情。我可以向前走,也可以向后退,它向我显示所有时间的全部堆栈踪迹。我甚至能够看到来回传送的参数和返回的值。
问:我在Visual Studio中如何设置它?
答:进入到工具 --> 选项 --> IntelliTrace。它在默认状态下是启用的,但是,仅捕捉事件,因为捕捉事件是便宜的。然而,当你开始跟踪所有这些调用信息时,真正的价值开始显现出来了。你每一次调试的时候,IntelliTrace都将弹出来,你在动态调试的时候可以使用这个历史性的调试工具。假如我在那里并且有一个断点,但是,我要备份和重新设计这个断点,我可以使用IntelliTrace完成这个任务。
问:我理解你可以重放捕捉的进程,对吗?
答:是的。如果你没有这些文件,使用IntelliTrace捕捉到调试进程的其他人可以把记录以及.dlls和pdbs文件发送给你,你可以重放它们的进程。这个进程也许进入到数据库(你没有这个数据库),它也许是采用你不能复制的方法设置的,它可能在你不能企及的网络上,但是,你不用担心,因为你拥有记录以及.dlls和pdbs文件,你可以重放。
当然,拥有源代码会更好,因为那样你就能够看到这个代码好像是在你自己的机器上调试它一样。这对于在你的机器上运行正常,在其他人的机器不能运行的那些神秘的故障来说是非常好的。它对于多线程的情况也是非常好的,当你经过这个应用程序的时候,这个软件瑕疵就消失了,但是,在正常速度运行时,这个软件瑕疵又出现了。
问:有注意事项吗?你如何解决这些问题?
答:最明显的问题是你不能在64位机器上做调试记录。你可以很好地重放记录进程。但是,你不能按下F5键开始调试和记录。但是,有一个技巧!
如果你改变你的设置作为32位运行,你就能够按下F5键进行调试和记录。查看一下这些截屏图像。下面这些截屏图像显示了需要修改的东西。