int i = 2; //当你需要断点的东西时,你用什么作为一次性线?

时间:2009-03-13 02:38:27

标签: debugging

每当我想在一个没有任何东西可以突破的地方(在一个循环内,& c),我倾向于自动下拉:

int i = 2;

我很好奇其他人使用的东西。

22 个答案:

答案 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

alt text

答案 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)

让我们考虑一下理想的属性。代码

  1. 是断点能力的
  2. 清楚地解释说它只适用于断点。
  3. 对于运行它的用户不会立即可见。
  4. 不影响运行时行为(包括运行时间)。
  5. 根据您使用的优化程序,最佳断点代码可能会有所不同。

    我不是很喜欢添加装配。它不可移植,它搞砸了编译器对周围代码的分析。即使它是无操作,也可能影响性能。

    打印是用户可见的。与调试器交谈感觉就像你做错了什么。我听说过在调试器中运行代码时线程错误如何消失的故事(这就是调试器得到它们名字的方式: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等的任何地方。