Estou fazendo alguma depuração em nível de assembly no GDB. Existe uma maneira de fazer com que o GDB me mostre a instrução de montagem atual da mesma maneira que mostra a linha de origem atual? A saída padrão após cada comando é semelhante a esta:
0x0001433f 990 Foo::bar(p);
Isso me fornece o endereço da instrução atual, mas tenho que continuar consultando a saída de disassemble
para ver qual instrução estou executando no momento.
Respostas:
Você pode mudar para o layout da montagem no GDB:
Veja aqui para mais informações. A instrução de montagem atual será mostrada na janela de montagem.
fonte
layout regs
tui reg vector
mostrar os registros do vetor em vez dos registros inteiros. (Mas nem sempre é muito utilizável, porque não permite escolher apenas o.v8_int16
algo ou algo assim, a exibição é uma grande bagunça.) Consulte o wiki da tag x86 para obter um tutorial rápido sobre a depuração do asm.si
) e que recurso inútil (janela de visualização que não exibe as informações necessárias). Não há nenhum sentido em baixo votar esta resposta desde que você é apenas o mensageiro ...·layout src
para ver o código fonte durante a depuração, e também worthing saída lembrar este modo porCTRL+x+a
Você pode fazer
e toda vez que o GDB parar, exibirá a desmontagem da próxima instrução.
GDB-7.0
também suportaset disassemble-next-line on
, que desmontará toda a próxima linha e fornecerá mais do contexto da desmontagem.fonte
si
(mas nãos
)?O comando
pode ser definido para ser executado o tempo todo usando o mecanismo de configuração usual.
fonte
x/ni $pc
para visualizar as próximas n instruções, que geralmente são bastante úteis.Configurando a seguinte opção:
Fornecerá resultados parecidos com este:
fonte
Se você deseja que as próximas instruções sejam exibidas automaticamente ao percorrer o programa, use o comando display da seguinte maneira -
display /3i $pc
O item acima exibirá 3 instruções sempre que um ponto de interrupção for atingido ou quando você pisar o programa em uma única etapa.
Mais detalhes na entrada do blog aqui .
fonte
De dentro do gdb, pressione
Ctrl
x
2
e a tela será dividida em 3 partes.A primeira parte mostrará o código normal no idioma de alto nível.
O segundo mostrará a montagem equivalente e correspondente
instruction Pointer
.O terceiro apresentará o
gdb
prompt normal para inserir comandos.fonte
Ctrl-X 2
, mas parece ogdb -tui
modo, o que é ótimo.layout split
partir do prompt gdb.Painel GDB
https://github.com/cyrus-and/gdb-dashboard
Essa configuração do GDB usa a API Python oficial do GDB para nos mostrar o que queremos sempre que o GDB para depois, por exemplo
next
, muito parecido com o TUI.No entanto, descobri que essa implementação é uma alternativa mais robusta e configurável ao modo GDB TUI interno, conforme explicado em: exibição dividida gdb com código
Por exemplo, podemos configurar o GDB Dashboard para mostrar desmontagem, origem, registros e empilhamento com:
Aqui está o que parece se você ativar todas as visualizações disponíveis:
Perguntas relacionadas:
fonte