gdb调试

  1. 编译
go build -gcflags "-N -l"
  1. gdb调试

    加载

    调试out

    • gdb a.out

    调试core

    1. 生成core
    ulimit -c unlimited(只对一个终端有用)
    
    1. gdb (程序名) (core名字)

    调试程序

    • gdb attach pid

    运行

    带着gui

    • gdb -tui (a.out)

    设置arg

    • set args 运行时参数

    常用

    • r 开始运行
    • c 运行到断点
    • n 下一步
    • s 进入函数
    • until 跳出循环
    • fin 结束函数
    • bt backtrace 显示当前调用堆栈
    • where 查看core目前位置的调用栈

    打印

    源代码打印

    • list num(打印num行附近代码)
    • list 打印代码,一直回车一直打

    变量打印

    • print (打印一切)

    断点

    设置

    • b 11(普通断点)
    • b 11 if some>=0(条件断点)
    • tb 11(临时断点,只用一次失效)

    删除断点

    • delete (可以指定断点编号)

    查看断点

    • info break

    多线程

    查看线程信息

    • info thread

    切换线程

    • thread id

    查看调用帧

    • info frame
    • backtrace

    显示汇编

    修改布局

    • layout asm

    显示函数汇编

    • disas /m functionname

    查看目前汇编

    • x/i $pc
    • display /3i $pc
    i line 13
    disassemble 0x4004e9, 0x40050c
    

    退出 q

dlv调试

  1. 进入包目录
dlv debug
  1. 其他和gdb差不多