Como destacar e saída de cores gdb durante a depuração interativo?
Pergunta
Por favor, não responda eu deveria usar ddd, nemiver, emacs, vim, ou qualquer outro front-end, eu prefiro gdb como ele é, mas gostaria de ver a sua saída com algumas cores terminais.
Solução
.gdbinit
Você pode ajustar o seu ~/.gdbinit
ter cores. Você pode usar .gdbinit
de Mamom que está disponível aqui:
https://github.com/gdbinit/gdbinit
Você pode ajustá-lo tanto quanto você quer também. Eu achei isso graças a este SO resposta . Aqui é o tipo de saída que você pode obter:
A GitHub também está disponível: https://github.com/gdbinit/Gdbinit
Em uma nota lateral, a mesma idéia também foi aplicada a LLDB .
GDB Painel
Seguindo o mesmo conceito, GDB Painel fornece uma interface visual modular para GDB em Python .
(void) walker
Outro projeto semelhante usa o suporte Python do GDB para fornecer mais extensibilidade, assim que este vale a pena conferir: https: // github .com / dholm / voidwalker
@dholm também fornece seu próprio .gdbinit inspirado da anterior.
pwndbg
Alguns projetos fornecer um conjunto de funções úteis, incluindo uma melhor exibição. Este é o caso para PEDA ou pwndbg . Este último dá a seguinte descrição:
substituição Um PEDA. No espírito do nosso bom amigo
windbg
,pwndbg
épwnd-bag
pronunciado.
- Velocidade
- Resiliência
- código limpo
Ele fornece comandos para suporte a depuração e explorar o desenvolvimento semelhantes aos de PEDA, e melhor visualização (embora este não é o foco principal do projeto). O software ainda está em desenvolvimento, e não foi devidamente lançado ainda.
voltron
projeto Descrição estados:
Voltron é uma UI depurador extensível para hackers. Ele permite que você anexar visualizações de serviços públicos em execução em outros terminais para o depurador (LLDB ou GDB), exibindo informações úteis, tais como desmontagem, pilha conteúdos, cadastre-se valores, etc, enquanto continua a dar-lhe o mesmo depurador CLI que você está acostumado.
Você pode modificar o seu .gdbinit
para integrá-lo automaticamente. No entanto, o próprio mostrador está fora de GDB (por exemplo, numa divisão tmux).
GEF
GEF é outra opção, e é descrito como:
Pretende-se a ser utilizado principalmente por exploradores e engenheiros reversos, a fornecer recursos adicionais para GDB usando a API do Python para ajudar durante o processo de análise dinâmica e explorar o desenvolvimento.
Outras dicas
Não é cores, mas considere texto do gdb gui . Faz uma grande diferença em como gdb utilizável é.
Você pode iniciá-lo com:
gdb -tui executable.out
Captura de tela:
Como você pode ver, as principais características são:
- mostra o que linha da fonte estamos no e linhas circundantes
- mostra pontos de interrupção
Eu sei que você não queria um frontend. Mas como sobre cgdb é muito perto de gdb, é textmode mas tem uma janela de origem acima, com destaque de sintaxe no código.
É possível aumentar consideravelmente a aparecer de gdb através do uso de cores. Isto é feito através de qualquer um dos seguintes métodos:
-
Colorized rápida através do "set prompt". Por exemplo, fazer o prompt negrito e vermelho:
set prompt \033[1;31m(gdb) \033[m
ou fazer a solicitação de uma nova forma, negrito e vermelho:
set prompt \033[01;31m\n\n#####################################> \033[0m
-
comandos Colorized via ganchos
- Colorized destaque de sintaxe do comando "list".
Todos os exemplos estão disponíveis nos seguintes posts escritos por Michael Kelleher:
"Embeleze GDB", Maio 12, 2010 (via archive.org)
"Sintaxe Experimental GDB destacando" , 15 de maio, 2010 (via archive.org)
#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 TUI, 'user-mode' hack.
Encontrou a parte principal aqui e modificou um pouco. Necessidades destacar, c ++ filt. Se as cores ficar confuso questão re comando.
cgdb
é muito melhor do que gdb -tui
Neat, eu só encontrei este hack usando colout: https: / /github.com/nojhan/colout/blob/master/colout/example.gdbinit
Eu queria destacar as seguintes:. Enfatizar 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 (em MSYS;? Em Linux normalmente gdb
vem com Python embutido já), backtrace
gancho, uso
python stack_trace = gdb.execute('backtrace', False, True')
stack_trace
processo Então, com expressões regulares do Python, e imprimi-los. Cores fortes e outros são alcançados 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)
Outra boa combinação de cores é dada por este configuração. Ela torna inspecionar os backtraces muito mais fácil. Para usá-lo, basta salvar o arquivo como ~/.gdbinit
e executar gdb normalmente
Novo nos próximos GDB 8.3!
https: / /sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
styling Terminal está agora disponível para o CLI ea TUI. GNU Fonte Destaque pode ainda ser usado para fornecer um estilo de código fonte trechos. Veja os comandos "set estilo", abaixo, para obter mais informações.
você pode obter cores que você quer;
# 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