golangインタラクティブデバッガーはありますか?[閉まっている]


85

タイトルはそれをかなり要約しています。Goを試していますが、インタラクティブな環境内でブレークポイントを設定したり、ステップイン/オーバー/アウトしたりすることができません。gdbを使用してGoをデバッグできることは知っていますが、ブレークポイント用にgdbにプラグインできるIDEを使用する場合と比較すると、非常に面倒です。

1つを検索しようとしましたが、構文が強調表示されているがデバッグが行われていないプラグインまたは小さなIDEしか見つかりませんでした。


この質問にたどり着いた他の人には、GDBに関する(現在受け入れられている)回答だけでなく、他の回答も確認してください
Leigh

回答:


38

更新:個人的には、GDBは機能しますが、Goで使用するのは好きではないので、血を吐くようになります。良い代替案については、他のいくつかの回答を確認してください。


はい、もちろん :)

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

これがその使い方の公式チュートリアルです。

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

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


2
フォローアップとして、私はMacを使用しており、開発を非常に素晴らしく簡単にするIntelliJ goプラグインを見つけましたが、LiteIDEはデバッグに非常に優れています(完璧ではありませんが、非常にうまく機能します)。更新されたGDBをインストールして、まったく機能させる必要がありましたが、これはちょっと面倒でした。
ダニエルウィリアムズ

4
それは多くの問題を抱えており、将来的にはgoチームによってサポートされなくなります(基本的な機能は別として)。以下の私の答えを参照してください
metakeule 2014

外出先でのGDBは何年も前に壊れ、機能しなくなりました。受け入れられた答えは完全に間違っています。
ミケーレジュゼッペファダ2015年

@ user4839438うーん、最初の2行は文字通り「外出先でgdbを使用しないでください」です。私は個人的に使用しましgodebugたが、前回行ったときはかなり良かったです。
Benjamin Gruenbaum 2015年

あなたは正しいですが、タイトルには「Goにはデバッガー(gdb)があります」と書かれていますが、これは実際にはもう真実ではなく、現在は不利益です。GDBは以前は古いバージョンのgolangで動作していましたが、それを動作させることは大きな問題でしたが、最終的には動作せず、おそらく動作しません。私はDwelveの幸せな子犬です、godebugも試してみます。
ミケーレジュゼッペファダ2015年

29

goのGDBサポートには、goチームによって修正されない多くの問題があります。

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

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

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


25
これは、現在採用され始めている言語を安心させるものではありません
Valerio 2014年

2
@ValerioColtrè外出先でデバッガーは必要ありませんでした。ユニットテストとPrintf( "%#v"、...)は、これまでのところうまく機能しました...
metakeule 2014年

20
@metakeule誰もデバッガーを必要としませんが、優れたデバッガーは、デバッグ、特に失敗したテストのデバッグにおいて、非常に役立ち、より効率的であることがわかります。さらに、デバッガーはコードを変更しませんが、printステートメントは変更します。
gotgenes 2014

GDBドキュメントから:「GDBはGoプログラムを十分に理解していません。スタック管理、スレッド化、およびランタイムには、プログラムがgccgoでコンパイルされている場合でも、デバッガーを混乱させる可能性があるとGDBが予想する実行モデルとは十分に異なる側面が含まれています。結果として、GDBは状況によっては役立つ場合がありますが、Goプログラム、特に同時実行の多いプログラムでは信頼できるデバッガーではありません。」
masukomi 2014年

Goはデバッガーとどのように連携しますか?「カスタムGoデバッガーについてはしばらく話しましたが、まだありません。」ラス・コックス
Ivan Chau

24

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/...そこにあります。


Godebugは非推奨になり、代わりにDelveを使用することをお勧めします
Alexandro de Oliveira

@AlexandrodeOliveiraありがとうございます。それに応じて回答を更新しました。
vonC 2017

掘り下げてみると、かなりうまくいくようです。まともなオープンソースツールのこの答えは、質問を「トピック外」にすることを少なくしているように私には思えます。閉じたツールを評価したくありません。質問を再構成する必要があるかもしれませんが、gdb(gdb)を見つけた後、gdbの代替を検索することは、実際には推奨されていません。
ジェリーグリーソン2018

15

更新:

私はそれをチェックアウトし、バージョン: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)ところ、それが得るのとほぼ同じくらい良いです。


もう違います!時代遅れの答え。
ミケーレジュゼッペファダ2015年

mailgun / godebugは大幅な改善です。使用する価値があります。ただし、使用する価値が非常に高いのは、統合されたインタラクティブなデバッガーを備えたIDEです。コンソールからのデバッグは、80年代のデバッグを彷彿とさせます。Goコードにインストルメンテーションを追加することは機能しますが、少し煩わしいです。コードの行を(アン)クリックして、ブレークポイントを(アン)設定したいだけです。
l3x 2015年

言い直します... dvelveデバッガー+ intelliJアイデアIDE。
ミケーレジュゼッペファダ2015年

user4839438さん、あなたの投稿に気づきました。試してみます。それがうまくいけば、JetBrainsのアップグレード料金を支払う価値は確かにあります。それは私にとって重要ではありませんが、DelveデバッガーはおそらくMS VisualStudioで動作すると聞いていました。参照marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
私はそれをチェックアウトし、バージョン:2016.1.3、ビルド:145.1617.8、リリース:2016年6月5日がDelveで動作することを報告できてうれしいです!ここからダウンロードできます:jetbrains.com/idea/download。:掘り下げるここでの指示インストールも従っgithub.com/derekparker/delve/tree/master/Documentation/...
l3x

9

編集

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. プロンプトに従ってGoSDKをセットアップします
  3. Goライブラリをセットアップします(通常はGOROOT / srcにあります)
  4. 「再生」アイコンを使用して、アプリケーションの実行構成の右上隅を設定します。
  5. 構成の編集->クリック+->アプリケーションへの移動

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

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

乾杯


評価/監視が機能しません:のシンボル値が見つかりませんでした...これを解決できますか?
Stefan Wuthrich-Altafino 2016年1

PyCharm
5.0.3CE

実際にdelveをビルドする必要はありません。プラグインには、自動的にバンドルされています。
dlsniper 2016年

@dlsniperはこれが最近ですか?試してみると、しばらくの間goプラグインをインストールしていて、アップグレードしましたが、delveをビルドするまで機能しませんでした。
MrE 2016年

@MrE delveは、プラグインが統合されてから約3か月前に、プラグインに同梱されています。ただし、LinuxとMac OSXの両方で64ビットでのみ機能します。
dlsniper 2016年


7

外出先でのIDEデバッグは可能です(再び)、実際に機能します!

DelveはMacOS Xでかなりうまく機能し、IntelliJ IDEA GoLangプラグインでサポートされています

Mac OSX、IntelliJ Idea 14、Go 1.5.1、Delve0.5でテストしました

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

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


IntelliJでどのように設定したか説明できますか?デバッガーはHTTPエンドポイントとして実行する必要がありますね。
MrE 2015

気にしないでください...ドキュメントなどを見つけました...しかし、どうやらPyCharmまたはIntelliJの最新バージョンが箱から出して動作する必要があります。
MrE 2015

特別なことは何もしませんでした。DvelveとintelliJ14をインストールしただけで、IntelliJ 15でも正しく動作します。以前のバージョンについて:わかりません。
ミケーレジュゼッペファダ2015

7
  1. オプション1-GDBhttps ://golang.org/doc/gdb

  2. 掘り下げる

  3. Visual Studioのコードのと、外出先プラグイン(まだ掘り下げを使用しています)。

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

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


Delveは遅れをとっていますが、それでも他のIMOよりも優れています。
オスタティ2016年

1
このIMOがベストアンサーです。オプション#3これはマルチプラットフォームソリューションでもあります。Delveにはいくつかの制限がありますが、基本的なビジュアルデバッグはかなりうまく機能します。
ギデオン2017

1

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

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


非常に素晴らしい!LiteIDEは少し...軽すぎます。私はIntelliJが大好きで、これをチェックします。
ダニエルウィリアムズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.