我想将当前执行行强制到同一函数中的特定行,可能会跳过中间行。我所有的老式调试器都有这个功能,但我在 Eclipse 中找不到它。有没有办法在不更改代码的情况下做到这一点?
5 回答
前两个答案似乎错过了这个话题,除非是我不理解这个问题。
我的理解是,我自己搜索的一个功能是,您想跳过多行(在单步执行代码时)并将程序计数器(以获取汇编词汇表)设置为给定的行。跳过一些代价高昂的对象创建、查看一些错误情况等可能会很有趣。我曾经在 Visual Studio(C 或 C++ 代码)中这样做。
我在 Eclipse 和 NetBean 中都没有找到。这可能是 JVM 的限制,或者是某些策略的执行......
Run to line命令当然会执行当前执行位置和指定位置之间的所有行。
我也一直在寻找这个功能,和“跑到线”不是一回事。
这很可能是 JVM 的限制。Java 没有实现 goto,尽管它有跳转语句,比如 break 和 continue。然而,这些是在块级别。如果这是 JVM 限制,我的猜测是更有可能是由于安全架构。对程序计数器的严格控制使入侵者(如病毒)变得虚弱,而且可悲的是调试器。
我认为这在 Java 中是不可能的。唯一允许您“后退”的功能是使用“drop to frame”,它会将您带回到当前帧的第一条指令。至少我还没有看到任何具有此特定功能的调试器,但我无法在网上找到为什么会这样......
我知道 Visual C 中的调试器允许更改为指针。我会继续寻找,也许至少我们会知道为什么会这样,但这似乎是某种设计限制。
功能请求说这是不可能的
在https://bugs.eclipse.org/bugs/show_bug.cgi?id=287795(感谢 Amitd)中, Darin Wright说这是底层 Java 调试器的限制:
目前,Java 调试器无法做到这一点,因为本机调试接口不提供任意移动/设置程序计数器的能力。
C / C++
然而,CDT 支持它(在 Neon、Ubuntu 14.04 上测试)。右键单击要转到的行,然后选择:
- “移动到行”:跳到行并在那里中断
- "Resume at line":跳转到该行并从那里继续执行
这也进一步证明了 Java 存在潜在的限制,因为 Java 往往在 Eclipse 中功能更丰富,并且这些菜单条目在 Java 中不存在于“Run to line”旁边(它不会跳过行的执行) .
如果您跳行,此测试程序将打印 0 i = 1
:
#include <stdio.h>
int main(void) {
int i;
i = 0; /* Break here. */
i = 1;
printf("%d\n", i); /* Jump to here. */
}
“运行到行”似乎需要程序正在运行并处于暂停状态才能使用。另一个选项是在调试模式下运行时为该行设置断点。
- 在同一行的源窗格中双击最左侧的垂直条以添加断点;或者,
- 选择该行并转到 Run > Toggle Breakpoint。
至少,这是在 Eclipse 3.3.2 中。