我们中很少有人会否认调试器的功能,但为了使它更有用,可以使用一些技巧。
例如在Python中,你可以使用 传递 来做任何事情,除了让你有空间放置一个断点并允许你观察Watch中的值窗口。
在C#中,我曾经做 GC.Collect() ,但现在我使用 if(false){}
你最有趣的虚拟线是什么?
答案 0 :(得分:29)
在C#中,你可以使用它:
System.Diagnostics.Debugger.Break();
它将强制断点。
答案 1 :(得分:13)
在C#中,在Visual Studio中
{}
或
;
答案 2 :(得分:8)
Debug.Assert(true);,自动从发布版本中编译。
答案 3 :(得分:5)
volatile int e = 9;
易失性意味着编译器不会删除它,因为我没有读取变量。 '9'只是为了非零。零对我的口味来说太普遍了。
答案 4 :(得分:2)
in gcc / g ++:
assert("breakpoint");
因为断言的任何非0 / null值都被视为真。
甚至
__asm__("nop");
至少我知道会为断点发出一个指令字节。 ;)
答案 5 :(得分:2)
我用
int x = 0;
我总是确保在完成调试后删除此行。
答案 6 :(得分:2)
我从来没有专门写过什么来打破,但如果我这样做,我会写
int moot;
当有一些我不关心但必须提供的“out”参数时,我会使用这个参数。
答案 7 :(得分:2)
对于C / C ++,我使用
__asm int 3;
这将在调试器将捕获的那行代码处生成断点异常。但需要注意的是,如果没有在调试器中运行,那么您的程序将因该异常而崩溃。
答案 8 :(得分:1)
在VB6中,我自己使用冒号。 :
答案 9 :(得分:1)
在c ++中我使用
Sleep(0)
有时,或只是找到一个已使用的变量并将其分配给自己:
i = i;
答案 10 :(得分:1)
是的,奇怪的是VS2010调试器如果它们在一个空语句(例如分号)上会改变断点。尽管它看起来像,在调试版本中你通常仍然可以在空的C#控制块或分号上放置一个断点,它会被正确命中。在被这一段时间烦恼之后,我只是创建了这个用来代替:
public static class Nop { public static void X() { } };
编辑:要使用它,请将Nop.X()放入代码中......
答案 11 :(得分:0)
不是很复杂,但功能齐全。
bool bp;
bp = true; //whereever I need to break.