GDB | 子进程调试 | 打印内存

 


 

gdb 默认追踪父进程运行  子进程独立运行 

i inferior  查看进程状态   

inferior 2 切换到进程2 

set follow-fork-mode child 调试子进程  

set detach-on-fork off 同时调试父子进程  另一个进程挂起

set schedule-multiple on  父子进程同时开启

set scheduler-locking on 让其他线程暂停执行 

add-inferior [ -copies n ] [ -exec executable ] 命令加载可执行文件 b   

add-inferior -copies 2 -exec b

跳转执行 jump    语句的运行点。可以是文件的行号,可以是file:line格式,可以是+num

clone-inferior -copies 1 

产生信号量 signal singal 

maint info program-spaces 打印被调试的进程信息

return (x) 强制返回  

强制调用函数 call expr   

break frik.c:13 thread 28 if bartab > lim 调试多线程

set detach-on-fork mode: 用于告诉GDB在fork()之后是否分离其中的一个进程,或者同时保持对他们的控制


 

tb 只断一次

ignore bnum count  忽略接下来几次断点

 

save breakpoints FILE  source FILE 

 

程序地址打断点  b *0x400522

b (anonymous namespace)::bar  匿名空间断点

frame 2  up  down  利用栈帧调试

catch syscall [name | number] 为关注的系统调用

awatch ”命令设置读写观察点

wa a thread 2

return expression ”命令指定函数的返回值


 

watch expr: 设置写watchpoint,当应用程序写expr, 修改其值时,程序停止运行

rwatch expr: 设置读watchpoint,当应用程序读表达式expr时,程序停止运行

awatch expr: 设置读写watchpoint, 当应用程序读或者写表达式expr时,程序都会停止运行

 

p 'static-1.c'::var

ptype he  详细的类型信息

gdb中使用“ x ”命令来打印内存的值,格式为“ x/nfu addr ”。含义为以 f 格式打印从 addr 开始

n:输出单元的个数。 

f:是输出格式。比如 x 是以16进制形式输出, o 是以8进制形式输出,等等。

u:标明一个单元的长度。 b 是一个 byte , h 是两个 byte (halfword), w 是四 个 byte (word), g 是八个 byte (giant word)

 

缺省情况下程序的输入输出是和gdb使用同一个终端。你也可以为程序指定一个单独的输入 输出终端。 tty /dev/pts/2

 

generate-core-file”命令来产生core dump文件  

跳转到指定位置执行  j line 

使用" info sharedlibrary regex "命令可以显示程序加载的共享链接库信息

“handle signal print/noprint ”命令设置当信号发生时,是否打印

 

保存历史命令

set history filename ~/.gdb_history

set history save on

退出时不显示提示信息 

set confirm off

按照派生类型打印对象 set print object on

打印数组的索引下标 set print array-indexes on

每行打印一个结构体成员 set print pretty on

 

如果想在gdb中查看宏信息,可以使用 gcc -g3 进行编译:

u -> until

j -> jump

 

set env LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0

“ set logging on ”命令把执行gdb的过程记录下来 

(gdb) set logging file log.txt (gdb) set logging on


 

在GCC编译程序的时候,加上-ggdb3参数

gdb中也可以有变量吗?就像shell一样,gdb中的变量以$开头,比如你想打印一个数组中的个个元素,你可以这样:

(gdb) set $i = 0

(gdb) p a[$i++]

 

readelf 获得入口地址

tracepoint  gdbserver  

远程:

gbdserver :0 ScenesServer/ScenesServer

gdb -q ScenesServer/ScenesServer

target remote :44693


 

https://blog.csdn.net/nancygreen/article/details/17789677 gdb查看容器内容

p ((unsigned long)(&((ClassName*)0)->MemberName)),即可打印出类

ClassName 的成员变量 MemberName 相对类基地址的偏移,根据偏移从小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值