====== GDB ====== * [[https://www.sourceware.org/gdb/|GDB: The GNU Project Debugger]] * GDB 支持的语言:Ada、 Assembly、 C、 [[.:cplusplus|C++]]、 D、 Fortran、 [[.:go|Go]]、 Objective-C、 OpenCL、 Modula-2、 Pascal、[[.:rust|Rust]]。 * [[https://sourceware.org/gdb/current/onlinedocs/gdb/|Online docs]] * [[https://evilpan.com/2020/09/13/gdb-tips/|GDB的那些奇淫技巧]] -- 超级棒,涉及子进程调试、多线程调试,以及一大堆指令表 * [[https://github.com/hellogcc/100-gdb-tips/blob/master/src/index.md|GDB调试的一百个小技巧]] ===== 远程调试 ===== * [[https://davis.lbl.gov/Manuals/GDB/gdb_17.html|gdbserver]] ===== Tips ===== * 获取指令帮助可随时运行 help, 比如 ''help run'' * 需要有调试符号,gcc 或 g++ 编译时带 ''-g'' 参数 * 可用 ''file '' 来查看是否带了调试符号 * gdb 里使用''info sharedlibrary''命令查看库符号加载 * 调试coredump 文件: ''gdb appname core-name'' * 调试进程: ''gdb appname 1234'', 1234 为进程id * 带参数: * ''gdb --args app arg1 arg2'' * 或者 gdb 启动后''set args arg1 arg2'' * 或 run 时携带参数:''run arg1 arg2'' * 查看参数 ''show args'' * 查看所有断点''info breakpoints'' * 删除对应序号断点:''delete 1'' * 如果进入某个函数直接崩溃报错, bt栈只显示到该函数地址,很大可能是改函数内栈溢出(一般是8M),查看变量或数组是否过大。 * 崩溃时,查看变量: * ''bt'' 显示栈信息 * ''frame 0'' 进入最顶部栈 * ''info local'' 打印所有局部变量 * ''p '' 打印某个变量,可打印全局变量 ===== 常用指令 ===== ^ 指令 ^ 简写 ^ 说明 ^ |help | h |查看帮助文档 | |run | r |执行程序 | |break | b | 打断点 | |info break |info b|查看断点 | |step | s |步进、进入内部 | |next | n |执行下一行 | |bt | bt |查看栈调用信息 | |print | p |查看变量等 | |list | l |查看当前代码 | |info source | |查看当前源码文件 | |info sources | |查看源码文件 | |continue | c |继续执行 | |where | |当前执行到哪 | |quit | q |退出gdb |