FangLin Game Dev Engineer

调试工具总结

2023-08-30
FangLin

编译

  • 使用-g option编译生成debug模式的可执行文件
  • 尽量禁止编译器优化
  • 尽量不要静态编译
  • 使用高版本的gdb
  • ulimit -c 设置core文件大小

gdb

  • 基础操作
    • gdb [exec-file [core-file/process-id]]
    • file <exec-file>
    • core <core-file>
    • attach/detach <process-id>
    • run/continue
    • kill
  • 断点调试
    • break/b [<location>] [if <expr>]
    • watch <cond> 表达式write时
      • rwatch 表达式read时
      • awatch 表达式read/write时
  • 跟踪控制
    • run/next/step/finish/continue 单步跟踪运行
    • nexti/stepi 汇编指令级的单步运行
    • jump <location> 控制程序的执行流,一般用于跳过/强制运行某些代码
  • 查看变量、堆栈
    • print
    • examine/x[/nfu] <addr> 查看内存内容;n:看几个单位;f:显示格式;u:每个单位的长度
      • e.g. x/1dw 0x7fffffffe39c
    • backtrace/bt 显示当前调用的堆栈
    • frame
    • up
    • down
    • display
    • info locals
  • 查看源码
    • list [<file-name>:]<line-number>
      • 上翻下翻代码 list [-]
    • TUI
      • <C-x-a> 切换TUI模式
      • <C-x-o> 切换窗口焦点
      • layout <next/prev/src/asm/regs/split> 修改窗口布局

进阶技巧

其他调试辅助工具

  • valgrind 用于内存调试、内存泄漏检测、性能分析
    • valgrind [–leak-check=yes] <exec-file>
    • 报警:内存越界,使用已释放内存,使用未初始化变量
    • 程序需要能正常终止;速度较慢
  • libefence.so
  • strace/ltrace 在没有源码的情况下查看程序调用了哪个系统调用/库函数

Similar Posts

下一篇 朝花夕拾

Comments