GDB - 查看崩溃程序maps映射表
可执行程序如何通过gdb查看映射信息?
在终端中打开gdb调试器:gdb 可执行文件名。
进入gdb调试器后,使用命令info proc mapping查看可执行程序的映射信息。
这个命令将会输出可执行程序的内存映射信息,包括可执行文件的代码段、数据段、堆和栈等信息,以及共享库的地址空间等信息。通过这些信息,我们可以更好地了解程序的内存使用情况,方便我们进行调试和优化。
背景信息
在日常的系统维护和故障排查中,经常需要查看特定进程的库映射表。例如,对于一个名为CMApp的进程,我们通常通过执行命令 cat /proc/[pidof CMApp]/maps 来获取其库映射表。这种方法简单直接,但它要求CMApp进程在执行命令时仍然处于运行状态。然而,在某些情况下,比如当进程崩溃产生核心转储(core dump)文件时,这种方法就不再适用。这是因为进程已经终止,无法通过 /proc 文件系统获取信息。
问题提出
在处理core dump文件时,我们面临一个问题:如何在没有活跃进程的情况下获取相同的库映射信息呢?这在定位和分析核心转储文件时尤为重要。
解决方案
幸运的是,有方法可以通过core文件提取出类似的映射信息。核心转储文件包含了进程崩溃时的内存快照,其中包括了内存布局和库映射的详细信息。通过特定的工具和技术,我们可以从核心转储文件中提取出这些信息,从而在进程不再活跃的情况下依然能够进行有效的故障分析。
实现
在GDB命令行中输入 info proc mappings
[root@daihadev161 BattleServer]# gdb libSceneServer.so core-Battle_1.2361.6.1737510472
GNU gdb (GDB) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
......
(gdb) info proc mappings
Mapped address spaces:
Start Addr End Addr Size Offset objfile
0x400000 0x59f000 0x19f000 0x0 /app/BattleServer/Battle_1
0x79e000 0x79f000 0x1000 0x19e000 /app/BattleServer/Battle_1
.....

浙公网安备 33010602011771号