tutorial que online how español compiler gdb

online - Evitar que GDB ingrese en una función(o archivo)



gdb windows (5)

En lugar de elegir "dar un paso", puede usar el comando "hasta" para comportarse normalmente de la manera que desee:

(gdb) until foo

No sé de ninguna manera para configurar permanentemente gdb para omitir ciertos símbolos (aparte de eludir su información de depuración).

Editar : en realidad, la documentación de GDB indica que no puede usar hasta saltar a ubicaciones que no están en el mismo marco. No creo que esto sea cierto, pero en caso de que lo sea, puede usar el avance para el mismo propósito:

(gdb) advance foo

La página 85 del manual de GDB define qué se puede usar como argumentos de "ubicación" para los comandos que los toman. Poner "foo" hará que busque una función llamada foo, por lo que siempre que pueda encontrarla, debería estar bien. Alternativamente, está atascado escribiendo cosas como el nombre del archivo: linenum for foo, en cuyo caso puede que sea mejor establecer un punto de interrupción en foo y usar continue para avanzar hacia él.

Tengo un código C ++ como este que estoy pasando por GDB:

void foo(int num) { ... } void main() { Baz baz; foo (baz.get()); }

Cuando estoy en main() , quiero entrar en foo() , pero quiero pasar por baz.get() .

Los documentos de GDB dicen que "el comando de paso solo ingresa una función si hay información del número de línea para la función", por lo que me alegraría si pudiera eliminar la información del número de línea para baz.get() de mi ejecutable. Pero idealmente, podría decirle a GDB "nunca entre en ninguna función en la clase Baz".

¿Alguien sabe como hacer esto?


Parece que esto no es posible en GDB. He archivado un error .


Mientras tanto, gdb tiene el comando skip function . Simplemente ejecútalo cuando estés dentro de la función poco interesante y no te molestará de nuevo.

skip file también es muy útil para deshacerse de los internos de STL.

Como dijo Justin, se ha agregado en gdb 7.4. Para más detalles, eche un vistazo a la documentación .


(Creo que esto podría ser más adecuado como un comentario que como una respuesta, pero aún no tengo la reputación suficiente para agregar un comentario).

Así que también he querido ignorar los archivos STL, Boost, et al (colectivamente "de terceros") al realizar la depuración durante un tiempo. Ayer finalmente decidí buscar una solución y parece que la capacidad más cercana es el comando ''omitir'' en GDB.

Descubrí que la capacidad de "omisión" en GDB es útil, pero sigue siendo una molestia para mí porque mi programa usa mucho STL y otro código de plantilla de "tercera parte". En este caso, tengo que marcar un montón de archivos como omisión. Después de la segunda vez que lo hice, me di cuenta de que sería más útil poder omitir un directorio completo, y lo más útil para omitir un directorio y todos los subdirectorios. De esa manera puedo omitir, por ejemplo, / usr ya que ninguno de mis códigos vive allí y normalmente no tengo interés en depurarlos a través de un código de terceros. Así que extendí el comando ''skip'' en gdb para soportar un nuevo tipo ''dir''. Ahora puedo hacer esto en gdb:

skip dir /usr

y luego nunca me detengo en ninguno de mis encabezados de terceros.

Aquí hay una página web con esta información + el parche si ayuda a alguien: información y parches para omitir directorios en GDB