Cómo evitar entrar en los archivos fuente de la biblioteca durante la depuración en Qt Creator con gdb?

StackOverflow https://stackoverflow.com/questions/1448426

Pregunta

¿Cómo puedo configurar Qt Creator y / o GDB de manera que durante la depuración mi programa usando Qt bibliotecas del depurador evitaría entrar en los archivos fuente de Qt?

¿Fue útil?

Solución

Es necesario desactivar la auto-solib-add. Desde un símbolo del BGF normales debería escribir:

(gdb) set auto-solib-add off

En Qt Creator, bajo Opciones-> Debugger-> Gdb puede especificar un script de inicio BGF. Crear un archivo con el "set-auto-solib añadir off" de comandos en ella y luego configurar el script de inicio Gdb a ese archivo.

Otros consejos

La función que desea (tal como se describe por rpg) no está disponible desde GDB, y en mi humilde opinión sería difícil de usar si se aplicara.

Una característica fstep similar, pero más sencillo de usar, se propone para GDB. Teniendo en cuenta:

foo((string("Hello") + string(" World!)).c_str());

la fstep saltaría todas las llamadas en la línea actual, excepto la última (saltándose constructores de cuerda, operator+() y c_str(), y entrar solamente en foo).

Esto no se ha aplicado bien, pero probablemente será en un par de meses (que es muy útil para la depuración C++).

Por el momento, se puede aproximar la característica estableciendo un punto de interrupción temporal:

(gdb) list
1       #include <string>
2       #include <iostream>
3       using namespace std;
4
5       void foo(const char *s)
6       {
7         cout << s << endl;
8       }
9
10      int main()
11      {
12        foo((string("Hello") + string(" World!")).c_str());
13        return 0;
14      }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run

Breakpoint 1, main () at t.cc:12
12        foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7         cout << s << endl;
(gdb) q

Actualizar después de la clarificación comentario:

En el BGF puede especificar qué directorios de origen son buscó -. si no se puede encontrar, no será capaz de entrar en ellos

Para BGF a estar entrando en los archivos de origen de las librerías qt debe saber dónde se encuentran - es probable que qt-creador está diciendo GDB donde están cuando se lance el depurador. Mire a su alrededor qt-creador de la secuencia de comandos de inicio de GDB -. Que podrían ser especificadas allí

Si no se especifican en el script de inicio y del BGF encontrar los archivos de origen en sí mismo debe ser capaz de modificar el script de inicio GDB para despejar cualquier directorio con el comando directory (véase el enlace anterior para la sintaxis, etc. )

También puede ser capaz de ver la consola GDB yendo a "Depuración -> Vistas -> Gdb" para obtener información sobre qué directorios fuente que está utilizando actualmente con el comando show directories en GDB, y despejar cualquier manualmente si querer hacer esto sobre una base de caso por caso.

Tal vez no es exactamente una solución perfecta a esta pregunta, pero tal vez ayudaría a Excluir los directorios en los que su proyecto es no (es decir. Bibliotecas 3 ª parte, cabeceras de sistema (como STL), etc.). Si es así, echa un vistazo a https://stackoverflow.com/a/31629136/5155476 y https://stackoverflow.com/a/42721326/5155476 . El primero permite especificar directorios (y todos los subdirectorios) para saltar al caminar mientras se ejecuta GDB (por lo que puede cambiar el juego siempre que lo desee), pero se requiere la creación de BGF. Este último permite la misma funcionalidad pero preestablecido antes de ejecutar el BGF, y no requiere la construcción de BGF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top