Как показать имя переменной const в дизассемблированном коде в gdb? - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующий код, который скомпилирован с опцией -g.

$ cat main.c 
/* vim: set noexpandtab tabstop=2: */
#include <stdio.h>

int U_var;
int I_var=42;
const int C_var=2;

static void inc_U_var() {
    U_var+=C_var;
}

void inc_I_var() {
    I_var+=C_var;
}

int main() {
    inc_U_var();
    inc_I_var();
    return 0;
}

В GDB константа C_var показана как $2. Есть ли способ сохранить имя переменной const в коде разборки? Спасибо.

(gdb) disassemble inc_I_var
Dump of assembler code for function inc_I_var:
   0x0000000100000ec0 <+0>: push   %rbp
   0x0000000100000ec1 <+1>: mov    %rsp,%rbp
   0x0000000100000ec4 <+4>: mov    0x156(%rip),%eax        # 0x100001020 <I_var>
   0x0000000100000eca <+10>:    add    $0x2,%eax
   0x0000000100000ecd <+13>:    mov    %eax,0x14d(%rip)        # 0x100001020 <I_var>
   0x0000000100000ed3 <+19>:    pop    %rbp
   0x0000000100000ed4 <+20>:    retq   
End of assembler dump.
(gdb) list inc_I_var
7   
8   static void inc_U_var() {
9       U_var+=C_var;
10  }
11  
12  void inc_I_var() {
13      I_var+=C_var;
14  }
15  
16  int main() {

1 Ответ

0 голосов
/ 13 января 2019

Как показать имя переменной const в коде дизассемблирования в gdb?

Вы не можете: во время компиляции const int C_vars заменяется его значением, поэтому в ассемблере у вас есть $2, а не доступ к C_var, GDB не может знать, откуда взято 2 из

...