在使用Visual Studio进行调试时,向后拖动指令指针

4

以下是需要翻译的内容:

举个例子,看一下这个视频的以下部分

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

a) 这与Intellitrace和“历史调试”有关吗? b) 这样做会有任何副作用吗?还是只是将指令向后移动而已?


它只是移动指令指针。当然可能会有副作用,你可能会意外跳过在源代码中不可见的必需代码。一个很好的例子在这里可用:https://dev59.com/HV4b5IYBdhLWcg3wnS0e。 - Hans Passant
2个回答

3
这只是简单地将指令指针向后移动而已,用你的话来说。
这意味着:
- 任何在你拖动指令指针之前和之后已经发生的副作用都已经发生了,不会被撤销。 - 在同一段指令中更改的任何变量仍将被更改,它们不会被还原为指令指针拖到的位置时的值。 因此,您可以使用此调试工具强制程序采取未走过的路径(例如通过将指令指针拖到if语句内部),跳过某些不想执行的代码(通过将指令指针拖过一些代码),或者重新运行某些代码。
但是,您必须了解上述限制。如果代码不能再次安全地执行,则这样做可能不会帮助您进行调试。

谢谢!这是推荐的做法吗?我找不到关于这个功能的任何信息,包括何时/何时不使用它。 - anemaria20
1
“推荐做法”听起来像是我会一直建议你做的事情,但这不是其中之一。然而,你应该学习如何使用这个函数,了解它能做什么和不能做什么,因为有时你别无选择,只能重新运行或跳过一些代码。例如,如果重新运行整个程序需要2-3分钟才能回到断点命中的位置,然后在“步入”代码之前你又多走了一步,那么我会轻松地将指针拖回并按F11键进入任何内容。 - Lasse V. Karlsen
谢谢!那往前移动呢?我看这也是可能的。如果它向前和向后的工作方式相同,我可以想象这就像一个goto语句.. - anemaria20

0

很长一段时间以来,这一点就已经可行了。光标所在位置之前发生的所有事情都已经发生过了,因此您基本上将重新执行那一部分。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接