输入自己的代码时如何中断?
How to break when entering own code?
"Just My Code" 功能允许将调试操作限制为用户代码(具有可用 pdb 的未优化代码)。
是否可以在程序流调用Visual Studio中的"my code"时中断?
潜在应用:当调试复杂的第三方应用程序使用的库中的问题时,问题发生时调用的任何内容 都是一个很好的起点。在输入自己的代码时中断将允许在没有过多日志记录的情况下执行此操作。
好像不是。
但是,如果所有自己的代码都在几个命名空间内,windbg
可以用作解决方法(以下是针对非托管代码;我想托管代码也有一种方法):
> bm ModuleName!NamespaceName::*
将为给定命名空间内的任何入口点设置断点。如果所有访问都是单线程的,windbg 甚至可以打印出执行中所有实际执行的条目的列表:
> bm ModuleName!NamespaceName::* "bd *; ln; l+t; p \"dv; pt \\"be *; r $retreg; g\\"\""
将为自动执行操作以记录并再次退出的所有潜在入口点添加断点:
bd *
在我们进入时禁用所有断点 "own code"
ln
打印信息到调用位置
l+t; p "[...]"
跳过调用约定处理
dv
打印局部变量(包括现在处理的参数)
pt "[...]"
跳到方法结束
be *
在我们离开时重新启用断点 "own code"
r $retreg
记录方法结果(如果调用约定和结果类型导致使用结果寄存器)
g
继续下一个断点
从日志中,通常至少可以识别第二次调试的合理断点和断点条件 运行(在任何调试器中,包括 Visual Studio)。
"Just My Code" 功能允许将调试操作限制为用户代码(具有可用 pdb 的未优化代码)。
是否可以在程序流调用Visual Studio中的"my code"时中断?
潜在应用:当调试复杂的第三方应用程序使用的库中的问题时,问题发生时调用的任何内容 都是一个很好的起点。在输入自己的代码时中断将允许在没有过多日志记录的情况下执行此操作。
好像不是。
但是,如果所有自己的代码都在几个命名空间内,windbg
可以用作解决方法(以下是针对非托管代码;我想托管代码也有一种方法):
> bm ModuleName!NamespaceName::*
将为给定命名空间内的任何入口点设置断点。如果所有访问都是单线程的,windbg 甚至可以打印出执行中所有实际执行的条目的列表:
> bm ModuleName!NamespaceName::* "bd *; ln; l+t; p \"dv; pt \\"be *; r $retreg; g\\"\""
将为自动执行操作以记录并再次退出的所有潜在入口点添加断点:
bd *
在我们进入时禁用所有断点 "own code"ln
打印信息到调用位置l+t; p "[...]"
跳过调用约定处理dv
打印局部变量(包括现在处理的参数)pt "[...]"
跳到方法结束be *
在我们离开时重新启用断点 "own code"r $retreg
记录方法结果(如果调用约定和结果类型导致使用结果寄存器)g
继续下一个断点
从日志中,通常至少可以识别第二次调试的合理断点和断点条件 运行(在任何调试器中,包括 Visual Studio)。