Как заставить GDB показывать номера строк относительно головы функции? - PullRequest
0 голосов
/ 15 февраля 2019

this это мой вывод GDB.Как я могу заставить его записывать номера строк вместо ...227, чтобы они были main+1, как это показывает, когда я его разбираю?

1 Ответ

0 голосов
/ 15 февраля 2019

Непонятно, что именно вы спрашиваете, поскольку адрес машинной инструкции и номер строки исходного кода напрямую не связаны.Возможно, в соответствии с вашими потребностями стоит использовать смешанный источник / разборка.Например:

(gdb) disassemble /m main
Dump of assembler code for function main:
5       {
   0x08048330 <+0>:    push   %ebp
   0x08048331 <+1>:    mov    %esp,%ebp
   0x08048333 <+3>:    sub    $0x8,%esp
   0x08048336 <+6>:    and    $0xfffffff0,%esp
   0x08048339 <+9>:    sub    $0x10,%esp

6         printf ("Hello.\n");
   0x0804833c <+12>:   movl   $0x8048440,(%esp)
   0x08048343 <+19>:   call   0x8048284 <puts@plt>

7         return 0;
8       }
   0x08048348 <+24>:   mov    $0x0,%eax
   0x0804834d <+29>:   leave
   0x0804834e <+30>:   ret

End of assembler dump.

Здесь показана каждая строка исходного кода перед разборкой машинного кода, связанной с ним.Отображаются как номера строк источника, так и адреса команд и смещения.Обратите внимание, что, вероятно, будет гораздо менее понятным, если вы применяете оптимизацию, так как часто код удаляется или переупорядочивается так, что он больше не имеет прямого соответствия порядку исходного кода.

Если вы хотите показатьтекущий адрес счетчика программы / смещение при шаге, тогда это можно сделать с помощью команды display /i $pc:

(gdb) display /i $pc
(gdb) run                                                                                         
Starting program: /home/a.out                                                                     

Breakpoint 2, main () at main.c:13                                                                
13          printf("Hello World");                                                                
1: x/i $pc                                                                                        
=> 0x40053a <main+4>:   mov    $0x4005d4,%edi                                                     
(gdb) step                                                                                        
__printf (format=0x4005d4 "Hello World") at printf.c:28                                           
28      printf.c: No such file or directory.                                                      
1: x/i $pc                                                                                        
=> 0x7ffff7a686b0 <__printf>:   sub    $0xd8,%rsp                                                 
(gdb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...