【问题标题】:Debugging - skip code with a breakpoint调试 - 使用断点跳过代码
【发布时间】:2017-07-14 04:21:37
【问题描述】:

您知道如何单击断点上的黄色箭头并将其向下拖动以跳过代码行的执行吗?那么,是否可以创建一个“When Hit”宏(或类似的东西)来跳过包含断点的行的执行?

所以不要像这样写代码

if(!Debugging)
   Response.Redirect("LoginFail.aspx");

我可以在Response.Redirect() 行上设置一个断点,“When Hit”会跳过它。

【问题讨论】:

标签: visual-studio


【解决方案1】:

我不知道这样做的方式。但是,您可以设置断点的“当命中”选项来运行宏。编写一个获取当前行然后设置下一个调试器行的宏应该不难。你可能想看看Debugger.SetNextStatement 方法。

这样的宏应该可以做到:

Public Sub SkipNextLine()
    ActiveDocument().Selection.LineDown()
    DTE.ExecuteCommand("Debug.SetNextStatement")
End Sub

【讨论】:

  • 这太棒了!不幸的是,宏从 Visual Studio 2012 中删除。
【解决方案2】:

是的,您可以使用跟踪点直接执行此操作。

  1. 在函数底部找到返回语句的地址或最后的右花括号,方法是在函数底部打断一次,然后在“寄存器”窗口中查看 EIP 寄存器或为“@eip”添加一个监视。
  2. 将跟踪点添加到要跳转的行。请记住,跳转将在执行该行的任何内容之前发生。跟踪点的内容应为{@eip = address},使用步骤 1 中的地址。

另见https://stackoverflow.com/a/14695736/301729

【讨论】:

    【解决方案3】:

    我不知道如何使用断点执行此操作,但您可以使用编译器指令跳过代码

    #if (DEBUG)
    //this code is skipped in debug mode
    #endif
    

    【讨论】:

      【解决方案4】:

      试试:

      #if DEBUG
      Response.Redirect("LoginFail.aspx");
      #endif
      

      确保在构建属性中检查了 DEBUG 常量。

      【讨论】:

        【解决方案5】:

        同意使用编译器指令或任何其他需要在代码中添加逻辑的方法。但是,也要理解编辑调试代码并不总是一种选择(例如,不拥有代码可能意味着没有构建它所需的所有资源)。

        如果是这种情况,恐怕编写自己的宏或等待 VS 有一个内置的等效宏是您唯一的选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-27
          • 2013-06-08
          • 2010-12-13
          • 2013-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多