c - 使用 Eclipse 调试器单步执行编译的 C 代码反汇编时如何显示变量名?
问题描述
我有以下 C 程序。
// main.c
int main(void) {
int x = 10;
int y = 20;
return 0;
}
当我在 Windows 上使用 Visual Studio 2019 的调试器逐步完成反汇编时,我看到以下输出,其中显示了 C 代码和相应的说明。
7: int x = 10;
mov dword ptr [rbp+4],0Ah
8: int y = 20;
mov dword ptr [rbp+24h],14h
9: int z = x + y;
当我Show Symbol Names
从右键单击上下文菜单中选择时,堆栈上的地址显示为它们对应的变量名称(例如,[rbp+4]
显示为[x]
)。
7: int x = 10;
mov dword ptr [x],0Ah
8: int y = 20;
mov dword ptr [y],14h
在 Linux 上使用 CDT 10.0.0.202009071455 在 Eclipse 2020-09 中进行调试时,我想启用类似的功能。我正在用gcc -g main.c
.
无论是否Show Symbols
从右键单击上下文菜单中选择,反汇编时都会显示以下内容。
int x = 20;
mov DWORD PTR [rbp-0x8],0xa
int y = 30;
mov DWORD PTR [rbp-0xc],0x14
是否有某种方法[rbp-0xc]
可以显示为[y]
,就像在 Visual Studio 中一样?我尝试过使用gdb
直接进行反汇编,但遇到了同样的问题,显示地址而不是标签。除了-g
编译时需要使用的选项之外,还有其他选项吗?我都试过了gcc
和clang
。
解决方案
推荐阅读
- kubernetes - helm/kubernetes 未安装列表中的所有 cronjobs
- jenkins - Jenkinsfile 手动输入(如果不是由 rest api 提供)
- c# - 零对多关系,还是别的什么?使用 FluentAPI
- dns - 使用自定义 DNS 映射 Google Cloud Functions
- azure-timeseries-insights - 天蓝色时间序列洞察资源管理器问题
- android - 找不到在片段中插入 RecycleView 的方法(Kotlin)
- php - 错误:传递给 App\Repository\FooRepository::__construct() 的参数 1 必须是 Doctrine\Common\Persistence\ManagerRegistry 的一个实例
- reactjs - 反应 useEffect 钩子问题
- javascript - jQuery / JS中单个参数中的多个参数不起作用
- c++ - 在 Outlook 电子邮件正文 C++ 中设置签名