2009-09-19 12 views

Respuesta

15

Necesitas 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. Cree un archivo con el comando "set auto-solib-add off" y luego configure el script de inicio de Gdb en ese archivo.

+1

no funcionará con la compilación estática por supuesto (está en el nombre auto-SOlib-add). –

1

actualización después de la clarificación comentario:

En GDB puede especificar qué source directories are searched - si no los encuentra, no será capaz de entrar en ellos.

Para que gdb ingrese los archivos fuente de las bibliotecas qt debe saber dónde están, es probable que qt-creator le indique a gdb dónde se encuentran cuando inicia el depurador. Mire alrededor de qt-creator para la secuencia de comandos de inicio de gdb: podrían especificarse allí.

Si no se especifican en la secuencia de comandos de inicio y si gdb encuentra los archivos de origen por su cuenta, debería poder modificar la secuencia de comandos de inicio de gdb para borrar los directorios con el comando directory (consulte el enlace anterior para conocer la sintaxis, etc. .)

También puede ver la consola de gdb yendo a "Depurar -> Vistas -> Gdb" para obtener información sobre los directorios de origen que está utilizando actualmente con el comando show directories en gdb y borrar cualquiera de forma manual si desea hacer esto caso por caso.

+0

Esto es lo que creo que Piotr quiere: tiene una llamada como foo (QVariant :: fromValue (MySuperClass (QString ("hi% 1"). Arg ("Andy")))). Al entrar, el depurador debe omitir arg, el constructor QString, la llamada fromValue e ingresar solo MySuperClass y foo. AFAIK, Qt Creator no puede hacer esto. Hubo una discusión sobre saltarse la maquinaria sig/tragamonedas al pasar por el código, pero no sé si lo implementaron. – rpg

+1

Andy, lo que estás describiendo se llama STEP OUT y STEP OVER y siempre ha sido posible en casi todos los depuradores. No quiero ** ** avanzar manualmente/sobre el código fuente de Qt. Quiero que el depurador lo pise ** automáticamente **.RPG tiene razón en su comentario y él describe la función que estaba preguntando. –

3

La característica que desea (como se describe en rpg) no está disponible en GDB, y en mi humilde opinión sería difícil de usar si se implementara.

Se propone una característica similar, pero más fácil de usar fstep para GDB. Teniendo en cuenta:

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

la fstep poder omitir 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 implementado tampoco, pero probablemente estará en un par de meses (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 
+1

¿Qué piensas acerca de la proposición de Andy de simplemente eliminar/ocultar los archivos fuente de la biblioteca? –

+1

Puedes intentarlo, pero no creo que te sirva de nada: GDB aún se adentrará en las funciones que no deseas, simplemente no mostrará la fuente de ellas. Podría decirse que es peor de lo que comenzaste. Además, si se encuentra en la plataforma ELF (por ejemplo, Linux), debería eliminar realmente los encabezados de las bibliotecas: el compilador los incluye en su ejecutable (IOW, la modificación de la secuencia de comandos de inicio de GDB probablemente resulte inútil). –

+0

@Employed: es 2012 y fstep todavía no es parte de GDB. ¿Hay otra alternativa? (O un parche que podría aplicar a las fuentes gdb) Esto es de hecho una necesidad para el desarrollo de C++. – nimrodm

Cuestiones relacionadas