当我用Visual Studio 编写C/C++时,我经常使用__asm nop;命令插入一个noop代码,以便有一些东西可以打破.例如:
if (someCondition())
{
__asm nop;
}
Run Code Online (Sandbox Code Playgroud)
当条件发生时我不知道该怎么做,但我想停止执行并检查当前状态.有时候someCondition()很简单就可以创建一个条件断点,但条件断点会大大减慢执行速度,但并不总是可行.
现在,在C#中,我通过调用System.Diagnostics.Debugger.Break()或直接进入调试器System.Diagnostics.Debugger.Launch().
现在我被迫编写Java,直到现在我找到了没有比做更好的替代方案System.out.println("bla-bla")并在那里设置断点.同样,请考虑条件断点不可行的情况.
所以,我不知道-是有一个__asm nop或System.Diagnostics.Debugger.Break()Java中的选择?
aio*_*obe 38
在字节码中,您有一条nop指令,但nopJava语言中没有语句.
你可以单独;在一行上添加一个额外的代码,代码仍然可以编译,但这并不比添加一个空行更有意义.
另一个"无所作为"的陈述可能是:
assert true;
Run Code Online (Sandbox Code Playgroud)
它没有任何副作用,可以在执行程序时关闭.
事实证明,assert true似乎没有生成任何字节码指令,这导致断言断言true被一起跳过.然而,Eclipse可以打破诸如此类的声明
assert Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)
这非常相似.
Java 将其解释为空语句:
;
Run Code Online (Sandbox Code Playgroud)
不过,正如评论中所指出的,Eclipse 不会让您在此处设置断点。如果你想要一些无用的东西,你可以在上面放置一个断点,这也很好且易于输入,我建议:
if(false){}
Run Code Online (Sandbox Code Playgroud)
您的编译器可能会警告您从未输入过,这对于提醒您在编译生产之前将其取出很有用。希望这可以帮助!
你可以放入任何不做任何事情的任意赋值语句,例如
if (someCondition()) {
int t=0;
}
Run Code Online (Sandbox Code Playgroud)
调试器很乐意打破这个.由于它t是块的本地,它不可能有任何副作用(并且将在生产代码中使JIT编译不存在).
或者,您可以编写一个静态函数,其中包含一个永久设置的断点,因此您可以执行以下操作:
if (someCondition()) {
breakPoint();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14244 次 |
| 最近记录: |