Si establezco un punto de observación para una variable local en el ámbito actual, se eliminará automáticamente cuando salga del alcance. ¿Hay alguna manera de establecerlo una vez y mantenerlo vivo automáticamente cada vez que ingrese el mismo alcance?¿Cómo configuro los puntos de observación persistentes y condicionales en variables de ámbito local?
¿Hay alguna forma de establecer un punto de observación condicional, como
watch var1 if var1==0
? En mi caso, la condición no funciona. gdb se detiene cada vez que se cambia el valorvar1
, en lugar de hastavar1 == 0
es verdadero. Mi gdb es GNU gdb 6.8-debian.
¿Cómo configuro los puntos de observación persistentes y condicionales en variables de ámbito local?
Respuesta
no estoy seguro de que el lenguaje nos estamos utilizando, por lo que la respuesta exacta variará, pero podrías cambiar la variable a ser estáticos, global, o dinámicamente asignada (y no lo hacen gratis cuando la función regresa?). De esta forma, su dirección sin formato no cambiará, y gdb podrá tener un punto de interrupción en ella.
En lugar de ver el valor cuando es igual a un valor específico; debe establecer un punto de interrupción condicional en la línea donde desea verificar el valor de
var1
. Esto debería tener efectivamente el mismo efecto
e.g.
(gdb) break main.c:123 if (var1 == 0)
Estoy de acuerdo con Dave en que un punto de interrupción condicional es el camino a seguir.
Sin embargo, para hacer lo que pidió, puede usar el comando commands
de GDB para establecer una lista de comandos GDB para ejecutar cada vez que se golpea un punto de interrupción. Encuentro esto increíblemente útil.
Te sugiero que escribas tus comandos GDB en un archivo para que sean fáciles de editar y fáciles de recargar con el comando source
. O puede especificar archivos de comando para cargar en la línea de comando de GDB o usar .gdbinit para que se carguen automáticamente.
Un ejemplo de un buen uso de commands
:
Supongamos que tengo una función format
que es llamado por una gran cantidad de otras funciones. Quiero romperlo, pero solo después de haber llamado a la función do_step_3
.
break do_step_3
commands
break format
continue
end
Usted podría utilizar esto para su problema con algo como:
break func
commands
watch var
continue
end
¡Excelentes puntos! ¡Gracias! – Tim
Puede establecer las condiciones en los puntos de observación de la misma manera que lo hace con los puntos de interrupción. Esto es in the documentation pero es cierto que apenas llama la atención sobre sí mismo.
Así que watch my_var if my_var > 3
funciona bien, al igual que el comando condition
.
Para recrear el punto de observación si la variable que está viendo está fuera del alcance, haga que gdb haga esto automáticamente utilizando un punto de interrupción al comienzo de la función como describió Zan.
Puede establecer un punto de observación que no se salga de alcance al configurarlo en la dirección de memoria.
(gdb) p &var1
$1 = (int *) 0x41523c0
(gdb) watch *(int *)0x41523c0
Hardware watchpoint 1: *(int *)0x41523c0
Esto también funciona para otros tipos de datos y punteros.
Esto puede ser útil, pero no funcionará aquí. Las variables locales no mantendrán la misma dirección entre las llamadas a funciones, pero es probable que otras variables apiladas usen esa ubicación de memoria ... – Nick
- 1. ¿Cómo borrar variables persistentes mientras se mantienen los puntos de interrupción en MATLAB?
- 2. Puntos de secuencia, condicionales y optimizaciones
- 3. comportamiento de las variables persistentes en MATLAB
- 4. Variables de declaración y pregunta de ámbito para Lua
- 5. ¿Cómo obtengo y configuro variables de entorno en C#?
- 6. Cómo establecer puntos de interrupción condicionales en Visual Studio?
- 7. ¿Cómo puedo acceder al ámbito local dinámicamente en javascript?
- 8. clases persistentes inicializar variables de instancia colecciones
- 9. Establecer variables de entorno local en C++
- 10. Hacer Eclipse intellisense/autogerir automáticamente para ámbito local y variables/métodos miembros
- 11. No entiendo rubí ámbito local
- 12. No se puede obtener puntos de observación de Eclipse
- 13. cómo establecer variables condicionales en deploy.rb de Capistrano
- 14. variables de ámbito Android nivel de aplicación
- 15. ¿Cómo debo evitar capturar involuntariamente el ámbito local en los literales de funciones?
- 16. Las variables locales en las definiciones de clase/ámbito
- 17. Constantes de PHP con ámbito local
- 18. ¿Cómo crear variables de ámbito dinámico en Python?
- 19. función php ámbito de las variables
- 20. Asignación de los condicionales
- 21. Percentil para cada observación w/r/t Agrupación de variables
- 22. agregando variables no persistentes a nsmangedobject
- 23. ¿Cómo configuro un espejo CPAN local?
- 24. Clojure: ¿cómo evaluar un formulario citado en el ámbito local?
- 25. Variables con ámbito de declaración If
- 26. Uso de variables de ámbito de aplicación en java
- 27. Establecer el punto de observación del hardware GDB/cómo configurar el punto de observación del software
- 28. Ámbito de funciones/variables (¿pasar por valor o referencia?)
- 29. CoffeeScript/Javascript ámbito de las variables
- 30. Python Solicitudes y sesiones persistentes
Estoy usando C++. Uso el punto de observación sobre punto de corte porque podría haber muchos lugares en el código que cambian el valor de la variable. Por lo tanto, no es realista agregar puntos de corte a cada lugar. Me gustaría ver si es posible establecer un punto de observación condicional. – Tim