Como evitar entrar arquivos de origem da biblioteca durante a depuração em Qt Creator com gdb?

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

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top