Delveの使い方
This content is a draft and will not be included in production builds.
dlv debug [package]テストをデバッグしたい場合は test サブコマンドがある。
dlv test [package] -- [-test.run=TestXxx]基本的には break をセットして cont する。
ステップ実行
Section titled “ステップ実行”step または s コマンドで次の命令を実行する。関数呼び出しの場合は関数の中へ遷移する。
next または n コマンドで次の行まで実行する。
continue または c コマンドで次のブレークポイントまで実行する。
ブレークポイント
Section titled “ブレークポイント”ブレークポイントは break または b で指定する。
break [name] [locspec] [if <condition>]locspec の指定方法はいくつかある。
break funcbreak func:linebreak filename:linebreak addressbreak [+-]offsetif を使うと条件付きブレークもできる。これは on コマンドでも同様のことができるらしい。
break func if i == 3関数のリストは funcs で取得できる。
funcs [regexp]ブレークポイントの一覧とクリアはそれぞれ次のコマンドで行う。
clear [name or id]clearall [locspec]
breakpoints [-a]bp [-a]スタックフレーム
Section titled “スタックフレーム”stack [-full] [-offsets] [-defer] [-a <n>]stack の結果にはインデックスが付いている。frame でカレントフレームを切り替える。
frame 1 [cmd]レジスタを確認する。frame で切り替えてもいい。
regs [-a]
frame 1 regs [-a]ソースコードで宣言されたところまでステップすると変数が使える。
set varname = value中身を出力する場合は print を使う。ある程度は式も書ける。
print [%format] exprp [%format] expr現時点で利用可能なフレームにある変数は locals で確認する。frame で切り替えてもいい。
locals [-v]
frame 1 locals [-v]変数は vars を使う。
vars [-v] [regexp]現在実行中または指定のIDを持ったゴルーチンを取得する。
goroutine [id] [command]全てのゴルーチンを取得する。
goroutinesソースコード
Section titled “ソースコード”現在停止している位置のソースコードを読む。
list [locspec]l [locspec]アセンブリで読む場合は disassemble を使う。
disassemble [-a start end] [-l locspec]disass [-a start end] [-l locspec]