You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位系统中用GDB调试32位可执行文件的问题

32位Ubuntu 18.04下GDB调试__libc_start_main看不到源码的解决办法

1. 安装32位glibc调试符号包

Ubuntu默认的32位glibc库不带调试符号,必须单独安装:

sudo apt update
sudo apt install libc6-dbg:i386

2. 确认源码与系统glibc版本匹配

你使用的glibc-2.27源码刚好匹配Ubuntu 18.04的默认glibc版本,只需确认glibc-2.27/csu/libc-start.c文件存在即可。

3. 重新编译32位测试程序

添加-O0关闭优化,避免调试时源码与汇编错位:

gcc -m32 -g -O0 -o test test.c

4. 正确执行GDB调试流程

启动GDB后按以下步骤操作:

gdb -q test

设置glibc源码路径:

dir /home/nick/c_programs/x86/glibc-2.27/csu

设置断点(选择pending,因为__libc_start_main在共享库中,启动前无法解析完整符号):

br __libc_start_main

当GDB提示Function "__libc_start_main" not defined. Make breakpoint pending on future shared library load? (y or [n])时,输入y。

运行程序:

run nikos

此时GDB应该会停在libc-start.c的对应源码行,和你64位调试时的效果一致。

额外排查步骤(如果仍不显示源码)

  • 执行info sharedlibrary查看libc.so.6是否已加载调试符号(标记为Yes)。
  • 手动指定调试符号路径:
set debug-file-directory /usr/lib/debug

内容的提问来源于stack exchange,提问作者Nick_h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:45:42