GDB宝典

3 篇文章 0 订阅

查看/修改core文件存放位置:echo "/corefile/core-%e-%p-%t" > core_pattern
修改core文件限制:ulimit -c unlimited
查看栈帧调用:bt full
显示局部变量:info locals
显示某个地址开始的信息:x/20wx 0xf73fa8

显示字符串:

(gdb) display *(char**)0xbefffdd8
4: *(char**)0xbefffdd8 = 0xbefffef1 "show"
(gdb) display **(char**)0xbefffdd8
5: **(char**)0xbefffdd8 = 115 's'

符号表中找代码:arm-linux-addr2line -C -f -e 符号表 地址
导入可执行文件的符号表:symbol-file
导入动态库符号表:add-symbol-file 符号表 动态库加载地址
设置动态库的位置:set solib-absolute-prefix ./ (./相当于共享库的所搜路径前缀)
set solib-search-path 路径(设置共享库的搜索路径,可以设置多个)
有可能设置后会有如下问题:
./program/lib/libiconv.so.2': not in executable format: File truncated
/lib/librt.so.0': not in executable format: File format not recognized
这个时候,需要注意你的文件是不是一个链接文件,需要直接把源冬天库文件拿过来并换成链接的名字
使用场景:通过服务器调试core文件时,往往动态库加载不上,通过 info sharedlibrary可以查看,加载的是Yes,没加载的是No


查看某个结构体指针:
MyRec * RecPtr = new MyRec;
RecPtr->tt = strdup("hello world");
RecPtr->a  = 100;
方法:
print RecPtr
print *RecPtr
print RecPtr->tt
print RecPtr->a
查看调用栈:
frame N:切换到栈编号为N的上下文中
info frame:查看当前函数调用的栈帧信息
info命令的其他使用方式:

如果挂在库里

用info proc mapping找到库的地址,然后拿bt的地址和库的地址相减,然后用相减的值再addr2line看。

另外info sharelibrary的地址是干什么用的呢?

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值