欢迎关注我的个人公众号:coredump。
基本操作
| 命令 | 说明 |
|---|---|
| gdb exceFile | 不带命令行参数 |
| gdb -args execFile arg0 ... argn | 带命令行参数 |
| r | 开始执行(run的简写)。 |
| c | 执行到下一个断点(continue的简写) |
| b <行号> | 在某行设置断点(b是break的简写) |
| b <函数名> | 在某函数设置断点 |
| d <断点编号> | 删除断点。每次设置断点后,每个断点都会有一个编号 |
| s | 单步执行之Step Into |
| n | 单步执行之Step Over |
| si | 汇编指令之Step Into |
| ni | 汇编指令之Step Over |
| display var | 跟踪显示变量var。以后每次程序用到变量var,都会打印其值 |
| undispay <编号> | 取消跟踪显示 |
| p var | 打印变量var一次。p是print的缩写 |
多进程/多线程
| 命令 | 说明 |
|---|---|
| set follow-fork-mode child | 设置fork之后跟踪子进程,而默认是父进程 |
| info thread | 查看当前调试进程的线程信息 |
| thread ID | 切换跟踪的线程。这里的ID是上面info thread得到的 |
| break file.c:100 thread all | 设置一个针对所有线程的断点 |
打印STL
下载stl-views。
将其加入到~/.gdbinit中,即可使用。
正在执行的gdb可以使用source ~/.gdbinit。
| 命令 | 说明 |
|---|---|
| pvector | std::vector<> |
| plist | std::list<> |
| plist_member | std::list<> |
| pmap | std::map<> std::multimap<> |
| pmap_member | std::map<> std::multimap<> |
| pset | std::set<> std::multiset<> |
| pdequeue | std::deque<> |
| pstack | std::stack<> |
| pqueue | std::queue<> |
| ppqueue | std::priority_queue<> |
| pbitset | std::bitset |
| pstring | std::string |
| pwstring | std::wstring |