引用:
记录学习心得。未来将统一整理。
一、基础知识
1:细节整理。
1,启动GDB的前置要求。
1)使用gcc/g++时,添加-g的指令。例如:g++ -g test.cpp -o test
2)如没有添加编译信息,可以运行程序,后使用源代码关联。(不确定此方式的具体操作方法)
2,GDB中可以使用shell
1)例:shell make <make-args> // rebuild source code.
2)可以忽略shell前置:make <make-args> // rebuild source code.
3,自动补全和查找功能。
1)b 'buffer( M-? 可以用来搜索buffer函数的位置。
2)可以使用TAB键进行自动补全。
4,调试已运行程序。
1)查找到进程ID,使用ID来调试
2)使用gdb <program>来链接源代码,然后attach来链接到进程。
5,暂停和继续。
1)断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),信号(single),线程停止(thread stop)。
2)继续(continue)
6,if判断:break/watch支持if判断。catch不支持。
7,GDB中可以查看三种变量值:
1)全局变量。
2)静态全局变量。
3)局部变量。
基本命令:
1 启动GDB gdb <program> gdb <program> core // add a core file.。 gdb <program> <PID> // if it is a server process. gdb will attach it automitically. 2 运行参数。 set args // 指定运行时参数。 show args // 显示运行参数。 3 运行环境 path <dir> // 设置程序运行路径 show path set environment varname [=value] // 设置环境变量,set env USER=zheng show environment [varname] 4 工作目录 cd <dir> // 和shell指令一致。 pwd 5 设置程序的输入输出。 info terminal tty <file>/<dev> 6 断点方式:break ~ <function> // 查看函数 ~ <+/- offset> // 从当前行偏移多少行。 ~ <filename:linenum> // 源文件 多少行。 ~ <filename:function> // 源文件:函数 ~ <*address> // 内存地址处停止。 info ~[n] // 查看第N个断点 7 观察点:watch watch <expr> // 表达式发生变化时停止。 rwatch <expr> // 表达式被读时停止。 awatch <expr> // 表达式被读/写时停止。 info watchpoints // 列出当前所设置的所有观察点。 8 捕捉点:catch catch <event> // 1 参数event:throw抛出,catch捕捉,exec调用,fork,vfork,un/load 共享库。 9 清除停止点:clear。 ~ ~ <function> ~ <linenum> ~ <filename:linenum> ~ <filename:function> delete [breakpoint][range] // range: 例[2-5][1-3] disable/enable // 使能和失能 停止点。 10 自动化调试的一个例子(包括if) break foo if x>0 commands printf "x is %d ", x continue end 11 信号处理 handle <single><keywords> no/stop no/print no/pass no/ignore info singles info handle 12 线程断点 break <linespec> thread <threadno> // break的其他方式也可以使用。 13 查看栈。 backtrace(bt) bt [n] // 打印n层信息 bt [-n] // 打印底下n层信息 frame(f) [n] // 查看第N层 up/down [n] // 向 上/下 移动 N层。默认为1 info frame // 打印更详细的信息。 14 显示源代码 list <first>,<last>/<> // 以参数确定显示位置。break可以使用的参数,list都可以使用 set listsize <count> // 设置显示行数。 show listsize 15 搜索(正则表达式) forward-search <regex> search <regex> reverse-search <regex> 16 指定源文件路径。 directory(dir) <dirname> shwo dir 17 自动显示功能 display <expr> display/<fmt> <expr>/<addr> undisplay ... delete display ... 18 GDB环境变量 set $foo = *obj_ptr show convenience 例: set $i = 0; print array[$i++]->content 19 修改程序中的变量: print x=4 // X时C/C++中变量 20 调转,强制调用函数和强制返回。 jump <linespec>/<address> call <expr> return <expr>/<>
三、