【问题标题】:Dragging the instruction pointer backward while debugging in Visual Studio在 Visual Studio 中调试时向后拖动指令指针
【发布时间】:2016-10-21 13:14:28
【问题描述】:

如需演示,请查看following section of this video

基本上,我知道这在 Visual Studio Community Edition 2015 中是可能的。我想知道:

a) 这与 Intellitrace 和“历史调试”有关吗? b) 我这样做会有副作用吗?或者这只是将指令向后移动,仅此而已?

【问题讨论】:

  • 它只是移动指令指针。肯定会有副作用,您可能会不小心跳过在源代码中不可见的所需代码。一个很好的例子是available here

标签: c# visual-studio debugging visual-studio-2015 intellitrace


【解决方案1】:

它只是将指令指针向后移动,就是这样,用你自己的话。

这意味着:

  • 在将其拖动到的位置和从其拖动到的位置之间已经产生的任何副作用都已经产生并且不会被逆转。
  • 在同一指令部分中更改的任何变量仍将更改,它们不会反转为您将指令指针拖动到的位置处的任何值

因此,您可以使用此调试辅助工具来强制程序采用它没有采用的路径(例如,通过将指令指针拖动到它跳过的 if 语句中),跳过(通过将指令指针拖动到某个您不想执行的代码),或重新运行某些代码。

但您必须了解上述限制。如果代码不能安全地再次执行,那么这样做可能无助于调试。

【讨论】:

  • 谢谢!这是推荐的做法吗?我无法找到有关此功能的任何信息,包括何时/何时不使用它。
  • “推荐练习”听起来像是我建议你一直做的事情,而这不是这些功能之一。但是,您绝对应该学习如何使用此功能,它可以做什么和不能做什么,因为有时您别无选择,只能重新运行或跳过某些代码。例如,如果重新运行整个程序需要 2 到 3 分钟才能回到断点命中的位置,然后在开始“单步执行”代码之前一步走得太远,那么我很容易就向上拖动指针并按 F11 进入任何内容。
  • 谢谢!向前推进呢?我看到这也是可能的。如果它向前和向后的工作方式相同,我可以想象这就像一个 goto 语句..
【解决方案2】:

它已经可行很长时间了。从您拖动光标的位置发生的所有事情都已经发生,因此您基本上将重新做那一点。

没有真正的后果,除非您正在处理某些内容或保存到数据库等,因为写入相同的现有数据可能会引发异常或混淆某些数据的处理。

所有已设置的变量(即使您将光标拖动到高于它们初始化的位置)将保留它们从您向上拖动光标的位置开始的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2017-08-15
    相关资源
    最近更新 更多