能否在当前GDB会话中加载额外的helper.so辅助库?
能否在当前GDB会话中加载额外的helper.so并调用dump_point?
完全可以在当前GDB会话中加载helper.so,无需重新运行程序就能调用dump_point(),具体操作步骤如下:
暂停目标程序
如果程序正处于运行状态,先通过Ctrl+C中断,或者确保程序已经停在某个断点处。加载共享库
在GDB命令行中调用dlopen加载helper.so:call (void*)dlopen("./helper.so", 1)其中
1对应RTLD_NOW常量,会立即解析库中的所有符号。加载成功时会返回一个非空指针,若返回空,可调用call dlerror()查看具体错误原因。调用辅助函数
加载成功后,直接调用dump_point()即可。假设调试会话中存在Point对象p,执行:call dump_point(&p)若GDB对函数返回值类型有疑问,可显式指定:
call (void)dump_point(&p)
注意事项
- 确保
helper.so与目标程序使用相同的编译环境(如同一编译器版本、相同的C++标准、一致的调试选项),避免因内存布局或符号不匹配导致的问题。
内容的提问来源于stack exchange,提问作者vicshen
相关产品推荐
相关产品推荐

