web-dev-qa-db-ja.com

golangインタラクティブデバッガーはありますか?

タイトルはほとんどそれを要約しています。私はGoを試していますが、インタラクティブな環境で必要なだけブレークポイントを設定し、ステップイン/ステップオーバー/ステップアウトすることができません。 gdbを使用してGoをデバッグできることは知っていますが、ブレークポイントのためにgdbにプラグインできるIDE.

私は1つを検索しようとしましたが、構文の強調表示はあるがデバッグのないプラグインまたは小さなIDEしか見つけることができませんでした。

80
Daniel Williams

Update:個人的には、GDBは動作しますが、GoでGDBを使用することは好きではありません。良い代替案については、他の回答のいくつかをご覧ください。


はい、もちろん :)

Goにはデバッガー(GDB)があります

公式チュートリアル 使用方法はこちらです。

'グラフィカルデバッグ'(つまり、エディターでブレークポイントを設定する)が必要な場合は、一部のIDEで(バックグラウンドでGDBを使用して)それを行うことができます。

具体的には、Eclipse、LiteIDE、Zeusはすべて、ブレークポイントを設定し、コーディング環境 (source) からデバッグできます。 これはZeusでそれを行う方法に関するビデオです

38

GoのGDBサポートには、goチームが修正できない多くの問題があります。

詳細については、 Rob Pikeによる投稿 を参照してください。

基本的なgdb機能(スタックトレース、値の出力)がサポートされているプラ​​ットフォームで機能するように努めますが、Goプログラムの完全な環境を理解するためにデバッガを使用する機能はおそらく機能しません。gdbサポートの改善はチームにとって優先事項ではありません。

彼らは他のデバッグオプションを探していますが、今のところ具体的な計画はありません。ドキュメントは古く、go 1.2に付属のruntime-gdb.pyscriptは、python3サポート(現在のUbuntuなど)でコンパイルされたGDBでは機能しません。

29
metakeule

更新2017:下記のgodebugプロジェクトの言及は、公式に derekparker/delve に置き換えられました。


元の回答:

これで(2015年3月)、コードのインスツルメントに基づく別のアプローチができました。

mailgun/godebug

godebugは、ソースコード生成を使用して、デバッグ呼び出しでプログラムを計測します。
go tool cover は、コードカバレッジに対して同様のアプローチを取ります。

  • godebugを実行すると、プログラム、関数呼び出し、変数宣言、およびステートメント行が解析され、結果のコードがどこか(現在はstdoutまたは元のファイルの所定の場所)に出力されます。
  • この変更されたコードを実行すると、ブレークポイントをどこかに置いたと仮定して、そのコードをステップ実行して変数を検査できます。

後日:任意のGo式を評価し、変数に書き込みます。


2015年6月の更新:

「一部」が期待するほどインタラクティブではないかもしれませんが、それでも評価されています(そして、 「ステップイン」機能 )。
Goにはデバッガーがあり、すばらしい! (Cloudfare)」を参照してください

ここにクールなビットがあります:移植性のない半ダースのptraceインターフェースと格闘する代わりに、godebugはソースコードを書き換え、すべての行にgodebug.Lineのような関数呼び出しを挿入します。すべての変数宣言でのgodebug.Declare、およびブレークポイントのgodebug.SetTrace(つまり、_ = "breakpoint"と入力した場所)。

このソリューションは素晴らしいと思います。
そこから得られるのは、(おそらくクロスコンパイルされた)デバッグ対応バイナリで、通常のバイナリと同じようにステージングサーバーにドロップできます

ブレークポイントに達すると、プログラムはインラインで停止し、stdinで待機します。

デバッグに適用するのが大好きなのは、Goの単一バイナリ、依存関係ゼロの哲学です。サーバー上のツールや権限を必要とせずに、どこでもビルド、どこでも実行できます。

ifdef GODEBUG  
    GOPATH="${PWD}" go install github.com/mailgun/godebug
    GOPATH="${PWD}" ./bin/godebug build -instrument "${GODEBUG}" -o bin/rrdns rrdns

デバッグはmake bin/rrdns GODEBUG=rrdns/...離れています。

24
VonC

更新:

私はそれをチェックアウトし、バージョン:2016.1.3、ビルド:145.1617.8、リリース:2016年6月5日がDelveで動作することを報告できてうれしいです!こちらからダウンロードできます: https://www.jetbrains.com/idea/download/ 。また、Delveのインストール手順に従ってください: https://github.com/derekparker/delve/tree/master/Documentation/installation

それは少し不安定です。 OSXログインプロンプトを取得した直後に、対話型デバッグが機能し始めました。時には、単純な.goプログラムをデバッグして、キックスタートする必要があります。しかし、それは機能し、私が見たGoの最高のインタラクティブなデバッグエクスペリエンスです。

元の投稿:

Golangインタラクティブデバッガーはありますか?はい。

使用する価値のあるgolangインタラクティブデバッガは存在しますか?番号

MacでGDBを設定するのは面倒ですが、実行可能です。

ただし、使用を開始すると、すぐにインストールに時間を浪費していることがすぐにわかります。

IntelliJを使用するように構成することもできます。

IntelliJ、LiteIDE、CGDBなどが提供していると思われる唯一の値は、GoのGDBデバッグサポートが非常に貧弱であることをより迅速に確認できることです。

これを使用していくつかのGoコードをステップ実行できますが、非常に単純な変数値以外の値を出力しようとすると、まともなデバッガーを希望して時間を浪費することになります。

以下は、CGDBを使用してmap [string] stringデータ構造の値を印刷しようとすると何が起こるかの例です。

_(gdb) print params
$1 = (github.com/go-martini/martini.Params) 0x15582 <runtime.reentersyscall+450>
_

...これはまったく役に立ちません。

次に、これを試してください:

_(gdb) print params["UserID"]
_

...そして、「バスエラー」が発生します。

Delve( https://github.com/derekparker/delve )はGoで記述されているので有望に見えますが、IDEではなくコンソールを使用して操作します。

Goでインタラクティブデバッグをサポートするまともな仕事をしてくれたIntelliJのエンタープライズバージョン(またはその他のIDE)には喜んで支払います。

現時点では、fmt.Printf("%v", variable)はほぼ同じくらい優れています。

15
l3x

[〜#〜] edit [〜#〜]

GOデバッガーはIntelliJまたはPyCharmのシンプルなプラグインになり、他のものをインストールする必要はありません。プラグインの設定でGoプラグインを探してください。

元の回答(2015年11月)

2015年11月末現在の最新版をお探しの場合:

詳細を取得

https://github.com/derekparker/delve

ビルド/セットアップの指示に従ってください:

https://github.com/derekparker/delve/wiki/Building

最新のIntelliJ(15)またはPyCharm(5)を取得

https://www.jetbrains.com/idea/download/

そして、選択したIDEでgo-lang-pluginを取得します。

Pycharm -> Preference -> plugins -> search for go
current version is Version: 0.10.749
IntelliJ -> Preference -> plugins -> search for go
current version is Version: 0.10.749
  1. 新しいGoプロジェクトをセットアップするか、プロジェクトをインポートします。
  2. プロンプトに従ってGo Go SDKをセットアップします
  3. Goライブラリをセットアップします(通常はGOROOT/srcにあります)
  4. 「再生」アイコンでアプリケーションの実行構成の右上隅を設定します。
  5. 構成の編集-> +をクリック->アプリケーションの実行

実行するパッケージまたはファイルを定義します。

セットアップが完了すると、[再生]アイコンと[デバッグ]アイコンがアクティブになり、通常どおりブレークポイント、ウォッチなどを設定できます。

乾杯

9
MrE

GDBの小さな呪いラッパーであるCGDBを喜んで使用しています。

8
pjvds
  1. オプション1-GDB https://golang.org/doc/gdb

  2. デルブ

  3. Visual Studio Code その goプラグイン (まだdelveを使用)。

私は個人的にオプション3を使用します。そのためには、 delve をインストールする必要があります。

このビデオは、実行中のデバッグを示しています。 https://youtu.be/uBjoTxosSys?t=16m11s (ビデオ全体が非常に興味深い)。

7
Pavel Nikolov

GOのIDEデバッグIS POSSIBLE(AGAIN)、実際に動作します

Delve はMac OS Xでかなりうまく機能し、 IntelliJ IDEAGo Langプラグイン でサポートされています。

Mac OSX、IntelliJ Idea 14、Go 1.5.1、Delve 0.5でテストしました

自己署名証明書の作成、システムリングへの追加などの通常のループを実行する必要がありました(Mac OS Xでデバッガーを実行するために必要)。最後に、IntelliJ内にGOプロジェクトを設定し、ブレークポイントの設定、変数の検査、シングルステップなど、通常のIDE +デバッガー機能を取り戻しました。

これは、コードをデバッグするために値を出力するよりも優れています。

私はGoglandにかなり満足しています( https://www.jetbrains.com/go/ )。これは基本的にGoをサポートするIntellijです。彼らがこれを開発している間、より良くなり続ける作業デバッガーがあります。私は2017年1月からそれを使用してきましたが、2016 MBPではほとんど安定しています。

Golandは、Goの開発に人間工学に基づいた環境を提供することを目的としたJetBrainsによる新しいコマーシャルIDEのコードネームです。

1
myyk