Setting conditional breakpoints using object ids(译)

原文:http://blogs.msdn.com/greggm/archive/2007/01/17/setting-conditional-breakpoints-using-object-ids.aspx

在本地代码中,很多时候设置一个中断条件是某个指定对象的实例的断点是非常有用的,这样就可以让程序仅仅中断在某个指定的对象实例时了。而达到这个效果,直接通过对象地址就可以判断了:

this == (CMyObject*)0x10fc10

在托管代码中,垃圾回收器(GC)会移动对象实例,即使使用对指针支持很强大的语言,去设置这样一个条件断点,也是徒劳的。替代方法是使用对象标识(object ids)。

第一步:建立对象标识。要标识对象,你需要找到你要标识的对象实例并把它放到监视窗口(watch window),然后右键单击对象实例,执行弹出菜单上的【标识对象】(Make Object ID)即可。这样在监视窗口里就有了'{1#}':

+  this {cswin.Form1, Text: Form1} {1#} cswin.Form1

    这里 ‘1#’ 表示这个对象是第一个被标识的对象,下一个被标识的对象ID会对于递增 (2#, 3#, 等等). 在MSDN有很对关于对象标识的文章。

第二步:设置条件断点。在断点窗口右键弹出菜单上点击"条件断点",然后设置条件,例如:

this == 1#

Happy debugging.

Published Wednesday, January 17, 2007 1:31 PM by greggm
Translated by Winking Zhang.
posted @ 2008-01-29 14:31 winkingzhang 阅读(...) 评论(...) 编辑 收藏