¿Puedo especificar que quiero que gdb se rompa en la línea x cuando char* x
apunta a una cadena cuyo valor es igual a "hello"
? Si es así, ¿cómo?¿Cómo configuro un punto de corte condicional en gdb, cuando char * x apunta a una cadena cuyo valor es igual a "hola"?
Respuesta
Puede utilizar strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
es el número de línea, x
puede haber ningún nombre de archivo y y
puede ser cualquier variable.
Nota: debe ejecutar el programa ya para que GDB vea el archivo stdlib. De lo contrario: 'Sin símbolo" strcmp "en el contexto actual. –
@ naive231 por "ver" Quise decir ver las funciones para que pueda romperlas, no la fuente: tiene que presionar 'ejecutar' para que las bibliotecas dinámicas se carguen. Para la fuente, googleela y encuentre: http://stackoverflow.com/questions/10000335/how-to-use-debug-version-of-libc :-) –
break x if ((int)strcmp(y, "hello")) == 0
En algunas implementaciones, es posible que gdb no conozca el tipo de retorno de strcmp. Eso significa que tendrías que lanzar, de lo contrario siempre se evaluaría como verdadero.
Since GDB 7.5 puede utilizar éstos prácticos Convenience Functions:
$_memeq(buf1, buf2, length)`
$_streq(str1, str2)
$_strlen(str)
$_regex(str, regex)
parece bastante menos problemática de tener que ejecutar un "extraño" strcmp()
en el proceso de apilar cada vez que el punto de ruptura es golpeado.
Tenga en cuenta que su GDB debe compilarse con compatibilidad con Python, lo que no es un problema con las distribuciones de Linux actuales. Para estar seguro, puede verificarlo ejecutando
show configuration
dentro de GDB y buscando--with-python
. Este pequeño oneliner hace el truco, también:$ gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python' --with-python=/usr (relocatable)
para su caso de demostración, el uso sería
break <where> if $_streq(x, "hello")
o, si su punto de interrupción ya existe y lo que desea añadir el condición de que
condition <breakpoint number> $_streq(x, "hello")
$_streq
sólo coincide con todo el str Por lo tanto, si desea algo más astuto, debe usar $_regex
, que admite Python regular expression syntax.
- 1. punto de corte condicional GDB en tipos arbitrarios
- 2. jdb punto de corte condicional
- 3. Cadena no es igual a la cadena?
- 4. ¿Cómo usar el punto de corte condicional en Eclipse?
- 5. php no es igual a no es igual, igual a
- 6. Eclipse/punto de corte condicional resultados en BreakpointException
- 7. No es igual condicional
- 8. Cómo imprimir la cadena a la que apunta un puntero mientras se depura usando gdb?
- 9. Cadena no es igual a
- 10. Puntos de corte de GDB
- 11. ¿Cómo puedo llamar a una subrutina cuyo nombre es un valor en un hash, en Perl?
- 12. ¿Cómo se comprueba si una cadena no es igual a un objeto u otro valor de cadena en java?
- 13. ¿Cómo puedo verificar si la variable char * apunta a una cadena vacía?
- 14. GDB: Ejecutar hasta el punto de corte específico
- 15. ¿Cómo configuro un punto de corte simbólico en _WebThreadLockFromAnyThread en Xcode?
- 16. ¿Cómo configuro una variable de compilación condicional?
- 17. ¿Cómo es que la dirección de una matriz es igual a su valor en C?
- 18. ¿Cómo comparo si una cadena no es igual a?
- 19. ¿Cómo saltar a un punto de interrupción dentro de gdb?
- 20. Convertir cadena a char
- 21. ¿Cuál es la diferencia entre "punto de corte de alternar línea" y "punto de corte alternar" en Eclipse?
- 22. ¿Cómo comprobar si mi cadena es igual a nulo?
- 23. doble es igual a igual y triple en php
- 24. punto de interrupción condicional en Visual Studio
- 25. Rieles validación de que un valor no es igual a
- 26. AspectJ: parámetro en un corte de punto
- 27. Cómo lanzar un char * a una cuerda en D?
- 28. ¿Cómo verificar si una variable es igual a una cadena u otra cadena?
- 29. Java: Entero es igual a ==
- 30. En Java, ¿cómo se convierte una Cadena en un char o un char en una Cadena?
Nota: 'strncmp' y' strstr' son otras funciones de consulta C útiles. –