¿Puedo especificar que quiero que gdb se rompa en la línea x cuando char* x
apunta a una cadena cuyo valor es igual "hello"
? Si es así, ¿cómo?
c
debugging
gdb
conditional-breakpoint
341008
fuente
fuente
strncmp
ystrstr
son otras funciones útiles de consulta en C.Respuestas:
Puedes usar
strcmp
:20
es el número de línea,x
puede ser cualquier nombre de archivo yy
cualquier variable.fuente
No symbol "strcmp" in current context.
run
para que las bibliotecas dinámicas se carguen. Para la fuente, búscalo en google y encuentra: stackoverflow.com/questions/10000335/… :-)$_streq
El método de @tlwhitec es mejor.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.
fuente
Desde GDB 7.5 puede usar estas funciones de conveniencia nativas :
Parece bastante menos problemático que tener que ejecutar un "extraño"
strcmp()
en la pila del proceso cada vez que se alcanza el punto de interrupción. Esto es especialmente cierto para la depuración de procesos multiproceso.Para su caso de demostración, el uso sería
o, si su punto de interrupción ya existe y solo desea agregarle la condición
$_streq
solo coincide con la cadena completa, por lo que si desea algo más astuto debe usarlo$_regex
, que admite la sintaxis de expresión regular de Python .fuente