Skip to content

Delveの使い方

This content is a draft and will not be included in production builds.

Terminal window
dlv debug [package]

テストをデバッグしたい場合は test サブコマンドがある。

Terminal window
dlv test [package] -- [-test.run=TestXxx]

基本的には break をセットして cont する。

step または s コマンドで次の命令を実行する。関数呼び出しの場合は関数の中へ遷移する。

next または n コマンドで次の行まで実行する。

continue または c コマンドで次のブレークポイントまで実行する。

ブレークポイントは break または b で指定する。

Terminal window
break [name] [locspec] [if <condition>]

locspec の指定方法はいくつかある。

Terminal window
break func
break func:line
break filename:line
break address
break [+-]offset

if を使うと条件付きブレークもできる。これは on コマンドでも同様のことができるらしい。

Terminal window
break func if i == 3

関数のリストは funcs で取得できる。

Terminal window
funcs [regexp]

ブレークポイントの一覧とクリアはそれぞれ次のコマンドで行う。

Terminal window
clear [name or id]
clearall [locspec]
breakpoints [-a]
bp [-a]
Terminal window
stack [-full] [-offsets] [-defer] [-a <n>]

stack の結果にはインデックスが付いている。frame でカレントフレームを切り替える。

Terminal window
frame 1 [cmd]

レジスタを確認する。frame で切り替えてもいい。

Terminal window
regs [-a]
frame 1 regs [-a]

ソースコードで宣言されたところまでステップすると変数が使える。

Terminal window
set varname = value

中身を出力する場合は print を使う。ある程度は式も書ける。

Terminal window
print [%format] expr
p [%format] expr

現時点で利用可能なフレームにある変数は locals で確認する。frame で切り替えてもいい。

Terminal window
locals [-v]
frame 1 locals [-v]

変数は vars を使う。

Terminal window
vars [-v] [regexp]

現在実行中または指定のIDを持ったゴルーチンを取得する。

Terminal window
goroutine [id] [command]

全てのゴルーチンを取得する。

Terminal window
goroutines

現在停止している位置のソースコードを読む。

Terminal window
list [locspec]
l [locspec]

アセンブリで読む場合は disassemble を使う。

Terminal window
disassemble [-a start end] [-l locspec]
disass [-a start end] [-l locspec]