GDB

https://www.bilibili.com/video/BV1q441127uN?from=search&seid=10088908157042936822

 

https://www.bilibili.com/video/BV1Y4411m7XQ/?spm_id_from=333.788.videocard.0

 

 

http://blog.csdn.net/haoel/article/details/2880

 

http://blog.csdn.net/haoel/article/details/2881

 

http://blog.csdn.net/haoel/article/details/2883

 

http://blog.csdn.net/haoel/article/details/2884

 

http://blog.csdn.net/haoel/article/details/2885

 

GDB
进到vs中进不到的函数中,在GBD中可以执行写内存的操作,可以动态改变变量的值,动态改变
进入寄存器等,断点调试(条件断点);

 

  • 三种GDB启动方式
1. gdb test 
2. gdb test core(GDB出现段错误时,产生core,启动时直接跳到该位置)段错误(数组越界,内存溢出)
int *a = 0; //没有申请内存,给野指针赋了值
*a = 100;
3. gdb test pid (可以调试在执行的程序)
gdb pid
ps -A (ps查看进程 -A查看所有的) pid
  • 寄存器
寄存器(临时存储介质,时间短)(CPU的一部分,CPU内部的缓存)
32位中有 
eax ebx esi edi esp ebp eip flag
32位中函数调用时的参数不要超过四个(eax ebx ecx edx),在加就会在内存中取,
所以传参数时不能传结构体本身,要传结构体指针
esi 源寄存器
edi 目的寄存器

esp 栈顶寄存器
ebp 栈底寄存器

eip 程序运行到哪,eip就指向那

flag 状态寄存器

 

 

c    跳到下一个断点
u    退出循环体
r 
s F10(VS)进入函数的下一步
n F11(VS)不进入函数内部的下一步
f 结束当前函数
bt 函数调用栈,函数调用关系(先调用那个。。。)
x 内存
x/
ifo locals i 查看变量i
q 退出
gdb help

tab补全

set listsize 30
l 10 
show listsize
l 10,20
l test.c:20

 
  • 设置命令行参数(传入时)
set args 10 20 30 40 50

shell + 命令
shell ls
shell pwd

 
  • 断点
断点
b 18
b func
b main.c:18
b display.c:func
info 
 

观察点
watch sum 变量名 有变化就停止 (写入)
info watchpoint
c

rwatch sum 当该变量被读取时就停止
awatch sum 当该变量被访问时就停止 == 被读或写时

 
捕捉点
catch 
1. catch throw
catch catch
2.catch exec 捕捉系统发生execve系统调用时 暂停程序
./helloworld 内核调用exec启动程序helloworld

3.catch fork 调用fork时就停止
fork在Linux中为创建进程

4.catch vfork 也是进程
vfork创建轻量级进程()
5.catch load 载入动态链接库时停止
6.catch unload 卸载动态链接库时停止

try是应用层进入内核层的关键(eg驱动)windows

 

 

 

 

assert 断言函数
char *str 若为空,则报错

gdb display core


gdb -tui ./display 以界面的方式启动
执行gdb 直接layout

 

vi makefile

l display_afw

set listsize 30

 

循环的地方设置断点

gdb gdbing

c 跳到下一个断点

 

 

print查看命令 内存 变量

查看数组
int a[10]
print *a@10

  

 

display 自动执行命令

自动显示变量
display *pbuf@7 数组
info display
undisplay 1 直接不显示
delete display num
disable display num y n
enable display num

display/i $pc
以二进制的形式 自动显示 
汇编代码的方式
pc指针
运行到哪条指令,显示汇编指令
显示每次执行的汇编命令

 

 

info  threads 查看线程

print counter 打印计数器的值

thread 2  让当前正在调试2

set scheduler-locking  开启这个机制:只有当前正在运行的进程运行,其他的都出在阻塞状态

  

 

 

x/nfu
x显示内存,
n是个数
f格式
u单位

 

posted @ 2017-12-17 23:19  千面鬼手大人  阅读(413)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css