visão dividida gdb com código

111

Eu estava apenas depurando um programa no gdb e de alguma forma encontrei um novo recurso que nunca tinha visto ou ouvido antes, uma visão dividida onde posso ver e navegar pelo código, além de dar comandos:

Desculpe pela imagem, mas ttys não tem screenshots.

O que é isso? O que eu fiz ou, mais especificamente, como posso obter esse modo de tela dividida novamente? Existe um nome para este modo ou algum lugar onde eu possa ler sobre como usá-lo?

Kevin
fonte
2
Para referência rápida: Você pode sair desse modo usando qualquer um dos Cx Ca, Cx a ou Cx A.` Veja esta pergunta .
Richard

Respostas:

95

É chamado de TUI (sem brincadeira). Comece por exemplo com gdbtuiou gdb -tui...

0xC0000022L
fonte
11
você também pode usar layout nextdepois de começar gdbnormalmente
khaverim
87

Você pode acioná-lo dinamicamente pressionando ctrl+ xe ctrl+ a.

POHAN WU
fonte
obrigado @ user146043, esta parece ser a única maneira se você estiver executando a tela ao mesmo tempo que ctrl-a é a maneira de iniciar os comandos da tela!
olik79
Parece que você também pode fechar com esse combo!
Nick Desaulniers
16

Você também pode iniciá-lo a partir do shell gdb usando o comando "-" (traço). Não tenho certeza de como desligá-lo dinamicamente.

Neowizard
fonte
Este parece ser o mais fácil de usar e lembrar.
Siyuan Ren
2
Você pode sair fazendo qualquer um dos Cx Ca, Cx a ou Cx A. Consulte stackoverflow.com/questions/14147117/…
dmonopoly
15

Painel GDB

https://github.com/cyrus-and/gdb-dashboard

O painel do GDB usa a API GDB Python oficial e imprime as informações que você deseja quando o GDB para, por exemplo, após um next, como o displaycomando nativo .

Vs TUI:

  • mais robusto, pois ele apenas imprime em stdout em vez de colocar o shell em um estado de maldições mágicas, por exemplo:

  • altamente configurável do Python: você pode selecionar o que deseja produzir e o tamanho de cada seção, dependendo do que você está depurando.

    As visualizações mais úteis já estão implementadas: fonte, montagem, registros, pilha, memória, threads, expressões ... mas deve ser fácil estendê-las com qualquer informação que é exposta na API GDB Python.

    A TUI só permite mostrar duas fontes, assembly e registradores e pronto. A menos que você queira modificar seu código-fonte C, é claro ;-)

insira a descrição da imagem aqui

Eu acredito que o GDB deve ser fornecido com uma configuração assim fora da caixa e ativado por padrão, ele atrairia muito mais usuários dessa forma.

Ah, e o desenvolvedor principal, Andrea Cardaci , tem sido muito responsivo e incrível. Muitos elogios.

Consulte também: Como destacar e colorir a saída do gdb durante a depuração interativa?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fonte
2
Não há palavras suficientes para descrever como isso é incrível. Obrigado :)
unresolved_external
11

Digite layoutcomo um comando em gdb e a janela dividida será exibida.

Alfred
fonte
5

Quando o GDB está no modo padrão, o uso winmuda automaticamente para o modo TUI.
Outro comando para o modo TUI:

  • info win
    Liste e forneça o tamanho de todas as janelas exibidas.
  • focus next | prev | src | asm | regs | split
    Defina o foco para a janela nomeada. Este comando permite mudar a janela ativa para que as teclas de rolagem possam ser afetadas para outra janela.

Leia aqui mais ajuda.

girardengo
fonte
2

Também existe uma ferramenta de interface para GDB chamada cgdb. Mesmo com algum destaque de cor. "ESC" para mudar para a visualização do código, "i" para voltar para gdb

cgdb

user3042599
fonte
1

O modo tui foi claramente inspirado no emacs - descobri por acidente quando bati em ^ Xo, que alterna entre janelas divididas no emacs - às vezes bati nisso distraidamente quando o que deveria fazer é mudar para um programa diferente. De qualquer forma, isso leva a outro recurso não mencionado ainda, que você pode mover o cursor da janela de código (onde você pode rolar) para a linha de comando, ou vice-versa, com ^ Xo.

Blob
fonte
Obviamente, a maioria dos programas do GNU tem emacs como atalhos de teclado, principalmente por motivos de consistência. Eu sei que existe um modo vi no bash, mas isso não é nem de perto bom o suficiente como o modo emacs.
klaus