2008-11-07 12 views
17

Pocos de nosotros negaríamos la genialidad de los depuradores, pero para hacerlo más útil, se pueden usar algunos trucos.¿Cuál es tu línea ficticia favorita para poner un punto de quiebre?

Por ejemplo en Python, puede utilizar pase hacer absolutamente nada, excepto a dejar espacio para poner un punto de quiebre y permitirá observar los valores en la ventana Inspección.

En C#, que solía hacer GC.Collect(), pero ahora uso si (false) {}

¿Cuál es su línea ficticia más lúdica?

+0

¿Por qué necesitaría una línea ficticia que poner un punto de interrupción en? ¿Cuándo no puedes usar una línea real? –

+0

Charles, algunas líneas se compilan en el IL, por lo que no hay lugar para colocar un punto de interrupción. Sin embargo, .NET en modo de depuración insertará una instrucción NOP en su lugar, por lo que aún puede romperlos. – FlySwat

+0

Wiki de la comunidad? –

Respuesta

27

En C#, puede utilizar esto:

System.Diagnostics.Debugger.Break(); 

Se obligará a un punto de ruptura.

+1

esta es la razón por la que amo al menos :) – Haoest

+0

FWIW, es similar a la declaración 'depurador;' en JavaScript. – orad

+1

Es extraño que esto se haya aceptado como la respuesta, ya que no aborda la pregunta real, que era sobre una línea en la que se puede poner un punto de corte. Forzar un punto de ruptura es una cuestión bastante diferente. –

1

en gcc/g ++:

assert("breakpoint"); 

ya que cualquier-0 no/valor nulo a una aserción se toma como verdad.

o incluso

__asm__("nop"); 

por lo menos sé que habrá un byte de la instrucción emitida por el punto de interrupción se produzca en. ;)

5
volatile int e = 9; 

Volátil significa que el compilador no lo eliminará porque no leo la variable. '9' solo para que no sea cero. Zero es demasiado común para mi gusto.

+5

Muchos programadores usarían 42 – thepaulpage

+1

@tehp - ¡Pero eso es otra pulsación de tecla y soy un ingeniero flojo! ¡GIMOTEO! – Robert

0

No muy sofisticado, pero funcional.

bool bp; 

bp = true; //whereever I need to break. 
0

En VB6, utilizo dos puntos, por sí mismo. :

1

utilizo

int x = 0; 

que siempre asegurarse de que elimine esta línea cuando he terminado de depurar.

+0

vea mi respuesta, pero debe agregar 'volátil' para asegurarse de que el compilador no la elimine. – Robert

+0

Esto no funcionará si tiene habilitada la configuración 'Tratar advertencias como errores'. – orad

0

en C++ que utiliza

Sleep(0) 

veces, o simplemente encontrar una variable que se utiliza y se asigna a sí mismo:

i = i; 
2

nunca he escrito algo en concreto para romper, pero si Lo hice, escribiría

int moot; 

Utilizo este cuando hay algún parámetro 'out' requerido que no hago importa pero debe proporcionar.

0

Cierto, es extraño que el depurador VS2010 cambie los puntos de ruptura si están en una declaración vacía como un punto y coma. A pesar de lo que parece, en una compilación de depuración aún puede colocar un punto de interrupción en un bloque de control C o un punto y coma vacío, y recibirá un golpe correcto. Después de ser molestado por esto por un tiempo, acabo de crear esto para utilizar en su lugar:

public static class Nop { public static void X() { } }; 

de edición: Para utilizarlo, puesto Nop.X() en su código ...

+0

@NoonSilk, con respecto al parámetro 'out' requerido, también uso una función auxiliar cuando no deseo devolver un valor: "return Failed (out fn_out_param);" donde fn_out_param es el parámetro 'out' de la función que contiene, y la función 'Failed' simplemente establece el parámetro out en nothing. Esto mantiene la declaración de devolución en la función que me importa en una sola línea. –

1

para C/C++ yo uso

__asm int 3; 

que generará una excepción de punto de interrupción en esa línea de código que se captura el depurador. Sin embargo, una advertencia es que su programa fallará con esa excepción si no se está ejecutando dentro de un depurador.

9

En C#, Visual Studio

{} 

o

; 
+0

solución elegante – blagus

Cuestiones relacionadas