Como evitar entrar arquivos de origem da biblioteca durante a depuração em Qt Creator com gdb?
-
11-09-2019 - |
Pergunta
Como posso configurar Qt Creator e / ou gdb para que durante a depuração meu programa usando Qt bibliotecas o depurador seria evitar pisar em arquivos de origem do Qt?
Solução
Você precisa desligar auto-solib-add. De um gdb normal de alerta que você deve digitar:
(gdb) set auto-solib-add off
Em Qt Creator, sob Opções-> Debugger-> Gdb você pode especificar um script Gdb inicialização. Crie um arquivo com o "conjunto de auto-solib-adicionar off" de comando na mesma e, em seguida, definir o seu roteiro Gdb inicialização para esse arquivo.
Outras dicas
O recurso que você quer (como descrito por rpg) não está disponível a partir GDB
, e IMHO seria difícil de usar se fosse implementada.
Um similar, mas mais simples recurso de uso fstep
a proposta para GDB
. Dado:
foo((string("Hello") + string(" World!)).c_str());
o fstep
iria ignorar todas as chamadas na linha atual, exceto o último (ignorando, assim, construtores de cordas, operator+()
e c_str()
, e pisar única em foo
).
Este não foi implementada qualquer um, mas provavelmente será em um par de meses (é muito útil para depuração C++
).
Nesse meio tempo, você pode aproximar o recurso definindo um ponto de interrupção temporária:
(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
Update após comentário esclarecimento:
No gdb você pode especificar quais fonte diretórios são procurou -. se não puder encontrá-los, não será capaz de ir para eles
Para gdb estar entrando os arquivos de origem das bibliotecas Qt deve saber onde eles estão - é provável que qt-criador está dizendo gdb onde eles estão quando se inicia o depurador. Olhe ao redor qt-criador para o script de inicialização gdb -. Eles podem ser especificado lá
Se eles não são especificados no script de inicialização e do gdb encontrar os arquivos de origem, por si própria, você deve ser capaz de modificar o script de inicialização do gdb para limpar os diretórios com o comando directory
(veja o link acima para sintaxe etc. )
Você também pode ser capaz de ver o console gdb, indo para "Debug -> Vistas -> Gdb" para obter informações sobre qual a fonte de diretórios que está usando atualmente com o comando show directories
no gdb, e limpar qualquer off manualmente se quer fazer isso em uma base caso a caso.
Talvez não exatamente uma solução perfeita para esta pergunta, mas talvez ele iria ajudar a excluir os diretórios onde o seu projecto é não (ie. 3º bibliotecas partido, cabeçalhos do sistema (como o STL), etc). Se assim for, dê uma olhada https://stackoverflow.com/a/31629136/5155476 e https://stackoverflow.com/a/42721326/5155476 . O primeiro permite que você especifique os diretórios (e todos os subdiretórios) para pular ao pisar durante a execução GDB (assim você pode alterar o conjunto sempre que quiser), mas exige que você construa GDB. Este último permite a mesma funcionalidade, mas pré-definido antes de executar GDB, e não requer a construção de GDB.