每当我想在一个没有任何东西可以突破的地方(在一个循环内,& c),我倾向于自动下拉:
int i = 2;
我很好奇其他人使用的东西。
答案 0 :(得分:11)
Visual Studio允许您打破大括号。
答案 1 :(得分:9)
在.NET Framework中(使用C#):
System.Diagnostics.Debugger.Break();
为避免每次都输入此内容,只需为您的首选语言创建新的代码段:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>sddb</Title>
<Shortcut>sddb</Shortcut>
<Description>
Code snippet for System.Diagnostics.Debugger.Break()
</Description>
<Author>Peter McG</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Code Language="csharp">
<![CDATA[System.Diagnostics.Debugger.Break();$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
答案 2 :(得分:7)
你不需要一次性代码。
你甚至可以在“for”循环声明中设置一个断点;
将光标移至“for”循环声明并按 F9
答案 3 :(得分:7)
如果它是x86机器上的C ++,我只使用:
__asm int 3
并等待异常命中。甚至不必在Windows上的调试器中启动,或者使用好的DebugBreak()。
答案 4 :(得分:5)
i = i;
或范围中定义的任何变量。
在C#/ VS中,您会收到编译器警告,因此它也是将代码标记为未完成等的好方法。
答案 5 :(得分:4)
console.write("stop here")
在.net中总是使用那条线,我不知道为什么,只是有多年。
答案 6 :(得分:3)
在C / C ++中,你可以使用no-op:
;
答案 7 :(得分:3)
asm { int3 }
但我是个疯子:D
答案 8 :(得分:3)
(void *)"Insert witty comment."
答案 9 :(得分:3)
插入代码要破坏有什么意义?是不是已经存在要破解的代码?我只是将断点放在有问题的实际线上;我的IDE(Eclipse)在执行该行之前停止。似乎很容易。
现在,在我学习条件断点之前,我曾经添加代码来测试有趣的条件,这样我就不会在每次循环迭代或每次调用常用函数时都会中断。
答案 10 :(得分:2)
bool breakHere = true;
这是自我记录的!
答案 11 :(得分:2)
在C#中,我打破了结束括号,在VB.NET中我打破了End If / Sub / Function / what。
答案 12 :(得分:2)
我在C#中使用它:
If (Debugger.IsAttached)
Debugger.Break();
我抛出IsAttached,这样如果它没有被删除,它就不会影响生产代码。
答案 13 :(得分:1)
int moo = 42;
为什么moo?不知道,它只是浮现在脑海中。为什么42?你为什么不选择它!
答案 14 :(得分:1)
在大多数(如果不是全部)Javascript调试器中,您可以使用
debugger;
语句,表现为断点。
答案 15 :(得分:1)
asm volatile(“nop”);
答案 16 :(得分:1)
int x = 0;
x = x;
答案 17 :(得分:1)
我使用int
值做同样的事情,但我最喜欢的是
int y=1;
答案 18 :(得分:1)
Console.Writeline(e.Message);
答案 19 :(得分:0)
String foo = "bar";
答案 20 :(得分:0)
让我们考虑一下理想的属性。代码
根据您使用的优化程序,最佳断点代码可能会有所不同。
我不是很喜欢添加装配。它不可移植,它搞砸了编译器对周围代码的分析。即使它是无操作,也可能影响性能。
打印是用户可见的。与调试器交谈感觉就像你做错了什么。我听说过在调试器中运行代码时线程错误如何消失的故事(这就是调试器得到它们名字的方式:D)。我要说这是要避免的,它解决的问题应该通过更好的调试器来解决(可能是一个易于使用的猴子修补程序?)。
我认为最好的代码是bool breakpoint_dummy = /* the value means nothing */ false;
。它适用于80列,它解释了它是什么,如果你的优化编译器不能处理未使用的变量,它(希望?)编译成xorl eax, eax
,一段快速而小的代码(我' d猜)。一般来说,零比一些便宜; - )
答案 21 :(得分:0)
我一直在做的是制作某种#define
,例如(VC ++):
#define NOP __asm{nop}
对于不同的平台,这可以很容易地成为其他平台,例如: (GCC):
#define NOP asm("nop")
如果没有内联汇编语言,你可以捏造一些明智的东西:
/* insert directives to prevent inlining and optimization */
void nop() {}
#define NOP (nop())
对于你不想要的构建,它也可以变成什么:
#define NOP ((void)0)
这种事情可以发生在特定于平台的typedef等的任何地方。