GDB资源集合:
https://sourceware.org/gdb/wiki/FAQ
Debug.Hacks中文版_深入调试的技术和工具
https://www.youtube.com/watch?v=-n9Fkq1e6sg (GDB - A Lot More Than You Knew)
gdb的其他操作
1、编译程序的时候加入-g参数,这样编译的时候加入一些额外的信息,这样在debug的时候能匹配到源码的某一行
2、最好不用用编译器的-O或者-O2编译,可能更改代码的执行顺序
3、如果在gdb中执行shell命令,可以用 ! comand或者 shell command执行
4、可以利用TAB进行命令补全
gdb调试stl
把http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt存入到~/.gdbinit中,
之后就可以利用下列命令调试了
数据类型 | GDB命令 |
std::vector<T> | pvector stl_variable |
std::list<T> | plist stl_variable T |
std::map<T,T> | pmap stl_variable |
std::multimap<T,T> | pmap stl_variable |
std::set<T> | pset stl_variable T |
std::multiset<T> | pset stl_variable |
std::deque<T> | pdequeue stl_variable |
std::stack<T> | pstack stl_variable |
std::queue<T> | pqueue stl_variable |
std::priority_queue<T> | ppqueue stl_variable |
std::bitset<n>td> | pbitset stl_variable |
std::string | pstring stl_variable |
std::widestring | pwstring stl_variable |
tip:
1、只看子进程的gdb 命令: set follow-fork-mode child/paratent 默认跟踪的是paratent进程
2、vi $(which pstack) 可以学到不少gdb相关小技巧
gdb执行错误的解决办法:
1、 执行过程中,提示缺少动态库的解决办法: set environment LD_LIBRARY_PATH /home/xxxx/lib