Como destacar e colorir a saída gdb durante a depuração interativa?
172
Por favor, não responda. Devo usar ddd, nemiver, emacs, vim ou qualquer outro front-end. Apenas prefiro o gdb, mas gostaria de ver sua saída com algumas cores de terminal.
Ele não fornecerá cores (portanto, não chamarei isso de Resposta), mas algumas configurações ~ / .gdbinit melhorarão a experiência. Eu uso isso como um mínimo: história set salvar no set de impressão bastante conjunto de saída de radix 16 set altura 0
activout.se
Seria bom alterar a resposta aceita para que minha resposta antiga e incorreta possa ser excluída. Obrigado.
Em uma nota lateral, a mesma idéia também foi aplicada ao lldb .
Painel GDB
Seguindo o mesmo conceito, o GDB Dashboard fornece uma interface visual modular para o GDB em Python.
andador (vazio)
Outro projeto semelhante usa o suporte Python do GDB para fornecer mais extensibilidade, portanto vale a pena conferir: https://github.com/dholm/voidwalker
O @dholm também fornece seu próprio .gdbinit inspirado no anterior.
pwndbg
Alguns projetos fornecem um conjunto de funções úteis, incluindo exibição aprimorada. Este é o caso de PEDA ou pwndbg . Este último fornece a seguinte descrição:
Uma substituição PEDA. No espírito do nosso bom amigo windbg, pwndbgé pronunciado pwnd-bag.
Rapidez
Resiliência
Código limpo
Ele fornece comandos para dar suporte à depuração e explorar um desenvolvimento semelhante aos do PEDA e exibir melhor (embora esse não seja o foco principal do projeto). O software ainda está em desenvolvimento e ainda não foi lançado corretamente.
Voltron é uma interface de usuário extensível para depurador para hackers. Permite anexar visualizações de utilitários em execução em outros terminais ao seu depurador (LLDB ou GDB), exibindo informações úteis como desmontagem, conteúdo da pilha, valores de registro etc., enquanto ainda fornece a mesma CLI do depurador à qual você está acostumado.
Você pode modificar o seu .gdbinitpara integrá-lo automaticamente. No entanto, a própria tela está fora do GDB (por exemplo, em uma divisão do tmux).
Seu objetivo é ser usado principalmente por exploradores e engenheiros reversos, para fornecer recursos adicionais ao GDB usando a API Python para auxiliar durante o processo de análise dinâmica e explorar o desenvolvimento.
muito obrigado pela sua resposta, você tem uma idéia de como desativar a saída do registro? (estou usando gdb para o código C ++ e não necessitam de nível assembler imediato)
vak
sim. Droga "Os comentários devem ter pelo menos 15 caracteres."
vak
1
@vak você tentou set $SHOWCPUREGISTERS = 0? Basicamente, você tem vários parâmetros que podem ser configurados e sempre pode modificar o código para atender às suas necessidades.
BenC
100
Não são cores, mas considere o gui de texto do gdb . Faz uma grande diferença em como o gdb é utilizável.
Você pode iniciá-lo com:
gdb -tui executable.out
Captura de tela:
Como você pode ver, os principais recursos são:
mostra em que linha da fonte estamos e as linhas circundantes
Uau! Obrigado! Há muito tempo que estou procurando por um bom shell gráfico em torno do gdb, e tentei xxgdb, kgdb e ddd, mas nenhum deles funcionou muito bem para mim, por isso fiquei com a antiga interface de linha de comando. Mas isso é absolutamente perfeito!
Thomas Padron-McCarthy
46
Ctrl-x Ctrl-a: digite para alternar para e do modo de texto da GUI, funciona mesmo sem a opção de linha de comando.
Jturcotte #
2
Imprimir em stdout a partir do programa interrompe a interface para mim. Alguma solução alternativa além de redirecioná-lo?
Ciro Santilli #
1
Eu recebo o mesmo problema com o stdout quebrando a interface. Ctrl-L ou qualquer que seja sua ligação de redesenho torna pelo menos utilizável. Para pessoas com o modo de edição vi ativado, Ctrl-X Ctrl-A não funciona, mas o comando 'layout src' o colocará no modo TUI com a fonte mostrada como a imagem.
Wilywampa
1
Abra um segundo terminal e, em seguida, emita o comando: $ tty Use o resultado para direcionar o stdout da sessão gdb para esse terminal usando o comando (gdb) set inferior-tty. ex. do meu conjunto .gdbinit inferior-tty / dev / tty2 agora seu stdout não irá atrapalhar o $ gdb -tui.
Netskink 18/01/16
46
Eu sei que você não queria um frontend. Mas e quanto ao cgdb, ele é muito próximo ao gdb, é um modo de texto, mas tem uma janela de origem acima com destaque de sintaxe no código.
Apenas tentei executá-lo: ele não vê nenhum histórico de gdb e também possui um prompt danificado, onde há algum espaço em branco entre o sinal de intercalação e o local real onde o símbolo está sendo digitado (provavelmente porque eu tenho um prompt colorido em gdb ) . Não estou impressionado.
Hi-Angel
19
É possível melhorar muito a aparência do gdb através do uso de cores. Isso é feito através de qualquer um dos seguintes métodos:
Prompt colorido com o "prompt definido". Por exemplo, torne o prompt em negrito e vermelho:
set prompt \033[1;31m(gdb) \033[m
ou faça do prompt uma nova forma, em negrito e vermelho:
set prompt \033[01;31m\n\n#####################################> \033[0m
Comandos coloridos através de ganchos
Realce de sintaxe colorido do comando "list".
Todos os exemplos estão disponíveis nos seguintes posts escritos por Michael Kelleher:
O estilo do terminal está agora disponível para a CLI e a TUI. O GNU Source Highlight também pode ser usado para fornecer estilo de trechos de código-fonte. Veja os comandos "definir estilo", abaixo, para mais informações.
Melhor resposta NUNCA! Você pode encontrar aqui um tutorial sobre como instalar gdb 8.3medium.com/@simonconnah/… , observe que sua máquina precisa de pelo menos 512 MB de RAM; caso contrário, o gcccompilador começará a lixeira.
usuário
7
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
Atenção: Buggy. Não há suporte para TUI, hack 'modo de usuário'.
Encontrei a parte principal aqui
e a modifiquei um pouco. Precisa destacar, c ++ filt. Se as cores ficarem bagunçadas, emita um comando novamente.
Diz-me bash: colout: command not foundquando eu corrobt f
usuário
4
Eu queria destacar da seguinte maneira: enfatize as linhas de um rastreamento de pilha que pertencem aos meus arquivos de origem (em vez de bibliotecas).
A solução foi usar gdb-python (no MSYS; no Linux já gdbvem com o Python já incorporado?), Hook backtrace, use
Em seguida, processe stack_tracecom as expressões regulares do Python e imprima-as. Negrito e outras cores são alcançadas por uma função como esta:
def term_style(*v):"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""return'\x1B['+';'.join(map(str, v))+'m'#Use like this:print term_style(1)+'This will be bold'+ term_style(0)#Reset.print term_style(1,30)+'This will be bold and coloured'+ term_style(0)print term_style(1,30,40)+'Plus coloured background'+ term_style(0)
Um exemplo de trabalho que usa o gancho - mesmo que mínimo - provavelmente seria mais bem-vindo.
Oi-Angel
4
Outra boa combinação de cores é dada por essa configuração . Torna a inspeção dos backtraces muito mais fácil. Para usá-lo, salve esse arquivo como ~/.gdbinite execute o gdb normalmente
Obrigado, era exatamente isso que eu estava procurando. Eu estava olhando para um aplicativo multiencadeado com uma pilha de chamadas longa e isso é perfeito para esses backtraces.
Johan Bjäreholt
-2
você pode obter as cores que desejar;
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
l
for implementada , sourceware.org/bugzilla/show_bug.cgi?id=21044 , adicionarei apenasl
ahook-stop
e insiro Dev Nirvana.Respostas:
.gdbinit
Você pode ajustar o seu
~/.gdbinit
para ter cores. Você pode usar o Mammon,.gdbinit
disponível aqui:https://github.com/gdbinit/gdbinit
Você pode ajustá-lo o quanto quiser também. Achei isso graças a esta resposta SO . Aqui está o tipo de saída que você pode obter:
Um repositório GitHub também está disponível: https://github.com/gdbinit/Gdbinit
Em uma nota lateral, a mesma idéia também foi aplicada ao lldb .
Painel GDB
Seguindo o mesmo conceito, o GDB Dashboard fornece uma interface visual modular para o GDB em Python.
andador (vazio)
Outro projeto semelhante usa o suporte Python do GDB para fornecer mais extensibilidade, portanto vale a pena conferir: https://github.com/dholm/voidwalker
O @dholm também fornece seu próprio .gdbinit inspirado no anterior.
pwndbg
Alguns projetos fornecem um conjunto de funções úteis, incluindo exibição aprimorada. Este é o caso de PEDA ou pwndbg . Este último fornece a seguinte descrição:
Ele fornece comandos para dar suporte à depuração e explorar um desenvolvimento semelhante aos do PEDA e exibir melhor (embora esse não seja o foco principal do projeto). O software ainda está em desenvolvimento e ainda não foi lançado corretamente.
voltron
A descrição do projeto indica:
Você pode modificar o seu
.gdbinit
para integrá-lo automaticamente. No entanto, a própria tela está fora do GDB (por exemplo, em uma divisão do tmux).GEF
O GEF é outra opção e é descrito como:
fonte
set $SHOWCPUREGISTERS = 0
? Basicamente, você tem vários parâmetros que podem ser configurados e sempre pode modificar o código para atender às suas necessidades.Não são cores, mas considere o gui de texto do gdb . Faz uma grande diferença em como o gdb é utilizável.
Você pode iniciá-lo com:
Captura de tela:
Como você pode ver, os principais recursos são:
fonte
Eu sei que você não queria um frontend. Mas e quanto ao cgdb, ele é muito próximo ao gdb, é um modo de texto, mas tem uma janela de origem acima com destaque de sintaxe no código.
fonte
É possível melhorar muito a aparência do gdb através do uso de cores. Isso é feito através de qualquer um dos seguintes métodos:
Prompt colorido com o "prompt definido". Por exemplo, torne o prompt em negrito e vermelho:
set prompt \033[1;31m(gdb) \033[m
ou faça do prompt uma nova forma, em negrito e vermelho:
set prompt \033[01;31m\n\n#####################################> \033[0m
Comandos coloridos através de ganchos
Todos os exemplos estão disponíveis nos seguintes posts escritos por Michael Kelleher:
"Embelezar o GDB", 12 de maio de 2010 (via archive.org)
"Destaque experimental da sintaxe do GDB", 15 de maio de 2010 (via archive.org)
fonte
Novo no próximo GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
fonte
gdb 8.3
medium.com/@simonconnah/… , observe que sua máquina precisa de pelo menos 512 MB de RAM; caso contrário, ogcc
compilador começará a lixeira.Atenção: Buggy. Não há suporte para TUI, hack 'modo de usuário'.
Encontrei a parte principal aqui e a modifiquei um pouco. Precisa destacar, c ++ filt. Se as cores ficarem bagunçadas, emita um comando novamente.
fonte
cgdb
é muito melhor quegdb -tui
fonte
Legal, eu encontrei esse hack usando o colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
fonte
bash: colout: command not found
quando eu corrobt f
Eu queria destacar da seguinte maneira: enfatize as linhas de um rastreamento de pilha que pertencem aos meus arquivos de origem (em vez de bibliotecas).
A solução foi usar gdb-python (no MSYS; no Linux já
gdb
vem com o Python já incorporado?), Hookbacktrace
, useEm seguida, processe
stack_trace
com as expressões regulares do Python e imprima-as. Negrito e outras cores são alcançadas por uma função como esta:fonte
Outra boa combinação de cores é dada por essa configuração . Torna a inspeção dos backtraces muito mais fácil. Para usá-lo, salve esse arquivo como
~/.gdbinit
e execute o gdb normalmentefonte
você pode obter as cores que desejar;
fonte