vb6 - studio - no se puede ejecutar codigo en modo de interrupcion
Modo de depuración en VB 6? (4)
¿Cómo puedo hacer algo similar al siguiente código C en VB 6?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
Es prácticamente lo mismo que los otros idiomas a los que estás acostumbrado. La sintaxis se ve así:
#If DEBUG = 1 Then
'' Do something
#Else
'' Do something else
#End If
Es fácil de recordar si solo recuerda que la sintaxis es exactamente la misma que las otras instrucciones de control de flujo en VB 6, excepto que los condicionales en tiempo de compilación comienzan con un signo de libra ( #
).
El truco es realmente definir la constante DEBUG
(o lo que sea) porque estoy bastante seguro de que no hay una definida por defecto. Hay dos formas estándar de hacerlo:
Use la palabra clave
#Const
para definir la constante en la parte superior de cada archivo fuente. La definición que establece de esta manera es válida en todo el módulo fuente. Se vería algo así como:#Const DEBUG = 1
Establece la constante en las propiedades del proyecto. Esto definiría una constante que es válida en todo el proyecto (y es probablemente lo que quiere para un indicador de modo "Depurar").
Para hacer esto, ingrese algo como lo siguiente en el cuadro de texto "Conditional Compilation Constants" en la pestaña "Make" del cuadro de diálogo "Project Properties":
DEBUG = 1
Puede definir constantes múltiples en este diálogo separando cada una de ellas con dos puntos (:):
DEBUG = 1 : VERSION2 = 1
Recuerde que cualquier constante que no está definida se supone que es 0.
Cody te ha contado sobre la compilación condicional. Me gustaría agregar que si desea un comportamiento diferente al depurar en el IDE (por ejemplo, desactivar su propio manejo de errores para que el IDE atrape los errores) no necesita una compilación condicional. Puede detectar el IDE en tiempo de ejecución de esta manera.
On Error Resume Next
Debug.Print 1/0
If Err=0 then
''Compiled Binary
Else
''in the IDE
End if
Esto funciona porque Debug.Print se omite en el EXE compilado.
- EDITAR ¡ Recuerde apagar el On Curriculum Next!
- EDITAR Puede envolver el cheque en una función como esta (gracias CraigJ)
Este es mi código corto y estable. Creo que es mejor que las constantes condicionales, porque no es necesario cambiarlo cada vez que se produce una complicación.
Public Function InIDE() As Boolean
On Error Resume Next
Debug.Print 0 / 0
InIDE = Err.Number <> 0
End Function
Para lograr el mismo efecto que MarkJ, pero con manejo de errores, puede usar el siguiente código.
Public Function GetRunningInIDE() As Boolean
Dim x As Long
Debug.Assert Not TestIDE(x)
GetRunningInIDE = x = 1
End Function
Private Function TestIDE(x As Long) As Boolean
x = 1
End Function
Cuando se ejecuta desde el IDE, habrá una carga adicional de invocar una función (que es ridículamente pequeña). Cuando se compila, esto se evalúa como una simple comparación numérica.