GDB调试技巧实战--判断变量或地址是否在共享内存中

引言

我们的产品比较多的使用共享内存作为进程间通信的方式,但是新加入的小伙伴经常困惑于某个变量或地址是属于本进程自己的还是在共享内存中,所以我着手基于GDB的Python API写了一个GDB命令来回答这个问题。

结果预览

(gdb) source CheckSharedMemory.py

(gdb) check_shared_memory shared_data
Variable 'shared_data' is NOT in shared memory.

(gdb) check_shared_memory shared_data->i1
Variable 'shared_data->i1' is in shared memory.

(gdb) p shared_data
$3 = (struct SharedData *) 0x7ffff7ff3000

(gdb) check_shared_memory 0x7ffff7ff3000
Variable '0x7ffff7ff3000' is in shared memory.

(gdb) check_shared_memory 0x7ffff
Variable '0x7ffff' is NOT in shared memory.

原理

GDB有个命令

(gdb) help info proc map
List of mapped memory regions.

能列出本程序内存范围,包括代码块加载到哪,栈,堆,共享内存,加载的动态库,如下是一个简单的输出结果

(gdb) info proc map
process 1818165
Mapped addre

你可能感兴趣的:(GDB技巧,gdb,linux,调试,共享内存)