输入自己的代码时如何打破?

时间:2017-09-11 21:51:42

标签: visual-studio debugging breakpoints

“Just My Code”功能允许将调试操作限制为用户代码(未优化的代码和可用的pdb)。

只要程序流在Visual Studio中调用“我的代码”,是否可以中断?

潜在的应用程序:在复杂的第三方应用程序使用的库中调试问题时,在出现问题时调用的任何内容是一个很好的起点。在输入自己的代码时断开将允许在没有过多记录的情况下执行此操作。

1 个答案:

答案 0 :(得分:1)

看起来并非如此。

但是,如果所有自己的代码都在几个名称空间内,windbg可以用作解决方法(以下是非托管代码;我假设这也是托管代码的一种方式):< / p>

> bm ModuleName!NamespaceName::*

将为给定命名空间内的任何入口点设置断点。如果所有访问都是单线程的,那么windbg甚至可以打印执行中执行的所有实际条目的列表:

> bm ModuleName!NamespaceName::* "bd *; ln; l+t; p \"dv; pt \\\"be *; r $retreg; g\\\"\""

将向所有可能自动执行记录并再次退出的操作的可能入口点添加断点:

  1. bd *禁用所有断点,因为我们正在输入&#34;自己的代码&#34;
  2. ln将信息打印到通话地点
  3. l+t; p "[...]"跳过调用约定处理
  4. dv打印本地(包括现在处理的参数)
  5. pt "[...]"跳到方法结束
  6. be *重新启用断点,因为我们正在离开&#34;自己的代码&#34;
  7. r $retreg log方法结果(如果调用约定和结果类型导致使用结果寄存器)
  8. g继续下一个断点
  9. 从日志中通常可以至少为第二次调试运行确定合理的断点和断点条件(在任何调试器中,包括Visual Studio)。