Có bất kỳ trình gỡ lỗi tương tác golang nào tồn tại không? [đóng cửa]


85

Tiêu đề tổng hợp khá nhiều. Tôi đang thử Go và tôi thực sự nhớ việc có thể đặt các điểm ngắt và bước vào / ra / ra nhiều như tôi muốn trong một môi trường tương tác. Tôi biết tôi có thể sử dụng gdb để gỡ lỗi Go nhưng điều đó khá khó chịu so với việc sử dụng một IDE có thể cắm vào gdb để ngắt điểm.

Tôi đã thử tìm kiếm một cái và chỉ có thể tìm thấy các plugin hoặc IDE nhỏ có đánh dấu cú pháp nhưng không có gỡ lỗi.


Để bất cứ ai khác, rồi đến về câu hỏi này, hãy chắc chắn rằng bạn kiểm tra câu trả lời khác, không chỉ là (hiện tại được chấp nhận) một khoảng GDB
Leigh

Câu trả lời:


38

Cập nhật : Cá nhân tôi, trong khi GDB hoạt động, tôi không phải là người thích sử dụng nó trong cờ vây và nó sẽ khiến bạn chảy một ít máu. Kiểm tra một số câu trả lời khác để biết các lựa chọn thay thế tốt.


Phải, tất nhiên :)

Go có trình gỡ lỗi (GDB)

Đây là hướng dẫn chính thức về cách sử dụng nó.

Nếu bạn muốn 'gỡ lỗi đồ họa' (nghĩa là đặt các điểm ngắt trong trình chỉnh sửa), một số IDE cho phép bạn làm điều đó (với GDB trong nền).

Cụ thể, Eclipse, LiteIDE và Zeus đều cho phép bạn đặt các điểm ngắt và gỡ lỗi từ môi trường mã hóa của bạn (nguồn) . Đây là video hướng dẫn cách thực hiện với Zeus .


2
Tiếp theo, tôi đang sử dụng máy Mac và tôi thấy plugin IntelliJ go giúp phát triển rất tốt và dễ dàng nhưng LiteIDE thực sự rất tuyệt vời trong việc gỡ lỗi (mặc dù không hoàn hảo nhưng nó hoạt động rất tốt). Tôi đã phải cài đặt một GDB cập nhật để làm cho nó hoạt động, điều này hơi khó.
Daniel Williams

4
Nó có rất nhiều vấn đề và sẽ không được hỗ trợ bởi đội ngũ đi trong tương lai (ngoài chức năng cơ bản), xem câu trả lời của tôi dưới đây
metakeule

GDB trên đường đi đã bị phá vỡ cách đây nhiều năm và không còn hoạt động. Câu trả lời được chấp nhận là hoàn toàn SAI.
Michele Giuseppe Fadda

@ user4839438 uhh, hai dòng đầu tiên có nghĩa đen là "không sử dụng gdb khi di chuyển". Cá nhân tôi đã sử dụng godebugnó khá tốt vào lần cuối cùng tôi đi.
Benjamin Gruenbaum

Bạn nói đúng, nhưng tiêu đề cho biết "Go có trình gỡ lỗi (gdb)" , điều này thực sự không còn đúng nữa và hiện đang là một lời khuyên. GDB đã từng làm việc với các phiên bản cũ của golang, cố gắng làm cho nó hoạt động là một pita lớn, và cuối cùng, nó không hoạt động và không thể hoạt động được. Tôi là một con chó con hạnh phúc với Dwelve, tôi cũng sẽ thử chơi godebug .
Michele Giuseppe Fadda

29

Hỗ trợ của GDB cho go có rất nhiều vấn đề mà đội cờ vây sẽ không khắc phục được.

Để biết thêm thông tin, hãy đọc bài đăng của Rob Pike :

Mặc dù chúng tôi sẽ cố gắng giữ cho chức năng gdb cơ bản (dấu vết ngăn xếp, giá trị in) hoạt động trên các nền tảng được hỗ trợ, khả năng sử dụng trình gỡ lỗi để hiểu môi trường đầy đủ của chương trình Go có thể sẽ không bao giờ hoạt động và việc cải thiện hỗ trợ gdb không phải là ưu tiên của nhóm .

Họ đang tìm kiếm các tùy chọn gỡ lỗi khác nhưng không có kế hoạch cụ thể cho đến lúc này. Tài liệu đã lỗi thời và runtime-gdb.pytập lệnh đi kèm với go 1.2 không hoạt động đối với GDB được biên dịch với hỗ trợ python3 (ví dụ như Ubuntu hiện tại).


25
điều đó không yên tâm đối với một ngôn ngữ đang bắt đầu được sử dụng
Valerio

2
@ ValerioColtrè Tôi chưa bao giờ cần trình gỡ lỗi. các bài kiểm tra đơn vị và Printf ("% # v", ...) đã phục vụ tôi rất tốt cho đến nay ...
metakeule

20
@metakeule Không ai cần trình gỡ lỗi, tuy nhiên, một trình gỡ lỗi tốt có thể tỏ ra cực kỳ hữu ích và hiệu quả hơn trong việc gỡ lỗi - đặc biệt là trong việc gỡ lỗi các bài kiểm tra không thành công. Ngoài ra, trình gỡ lỗi không làm thay đổi mã của bạn, trong khi các câu lệnh in thì có.
gotgenes

Từ tài liệu GDB: "GDB không hiểu rõ về các chương trình Go. Quản lý ngăn xếp, phân luồng và thời gian chạy chứa các khía cạnh đủ khác với mô hình thực thi GDB cho rằng chúng có thể gây nhầm lẫn cho trình gỡ lỗi, ngay cả khi chương trình được biên dịch bằng gccgo. Như Kết quả là, mặc dù GDB có thể hữu ích trong một số trường hợp, nó không phải là một trình gỡ lỗi đáng tin cậy cho các chương trình Go, đặc biệt là những người nặng nề đồng thời"
masukomi

Go hoạt động như thế nào với trình gỡ lỗi? "Chúng tôi đã nói chuyện một thời gian về trình gỡ lỗi Go tùy chỉnh, nhưng vẫn chưa có." bởi Russ Cox
Ivan Châu

24

Cập nhật năm 2017: dự án godebug được đề cập bên dưới hiện đã chính thức được thay thế bằng derekparker / delve .


Câu trả lời ban đầu:

Bây giờ bạn (tháng 3 năm 2015) có một cách tiếp cận khác, dựa trên công cụ mã.

mailgun / godebug :

godebugsử dụng tạo nguồn để tạo công cụ cho chương trình của bạn bằng các lệnh gọi gỡ lỗi .
go tool coverthực hiện một cách tiếp cận tương tự đối với phạm vi mã.

  • Khi bạn chạy godebug, nó sẽ phân tích cú pháp chương trình của bạn, các lệnh gọi hàm công cụ, khai báo biến và các dòng câu lệnh, và xuất ra mã kết quả ở đâu đó (hiện tại là stdout hoặc tại chỗ trên các tệp gốc của bạn).
  • Khi bạn chạy mã đã sửa đổi này, giả sử bạn đặt một điểm ngắt ở đâu đó, bạn có thể bước qua nó và kiểm tra các biến.

Đến sau: đánh giá biểu thức Go tùy ý và ghi vào biến.


Cập nhật tháng 6 năm 2015:

Mặc dù nó có thể không tương tác như "một số" có thể hy vọng, nó vẫn được đánh giá cao (và có tính năng "bước vào" ).
Xem " Go có trình gỡ lỗi — và nó thật tuyệt vời! " (Cloudfare)

đây là một điểm thú vị: thay vì vật lộn với nửa tá ptracegiao diện khác nhau không thể di động, hãy godebugviết lại mã nguồn của bạn và chèn các lệnh gọi hàm như godebug.Linetrên mọi dòng, godebug.Declaretại mọi khai báo biến và godebug.SetTracecho các điểm ngắt (tức là bất cứ nơi nào bạn nhập _ = "breakpoint").

Tôi thấy giải pháp này tuyệt vời.
Những gì bạn nhận được từ nó là một bản nhị phân hỗ trợ gỡ lỗi (có thể được biên dịch chéo) mà bạn có thể thả trên một máy chủ dàn giống như bạn làm với một bản nhị phân thông thường .

Khi đạt đến điểm ngắt, chương trình sẽ dừng nội tuyến và chờ bạn trên stdin.

Đó là triết lý đơn nhị phân, không phụ thuộc của cờ vây mà chúng tôi yêu thích được áp dụng để gỡ lỗi. Xây dựng ở mọi nơi, chạy ở mọi nơi, không cần công cụ hoặc quyền trên máy chủ.

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

Gỡ lỗi chỉ là một make bin/rrdns GODEBUG=rrdns/...cách xa.


Godebug hiện đang bị phản đối và họ khuyên bạn nên sử dụng Delve thay
Alexandro de Oliveira

@AlexandrodeOliveira Cảm ơn bạn. Tôi đã cập nhật câu trả lời cho phù hợp.
VonC

Thử tìm hiểu kỹ, có vẻ hoạt động khá tốt. Đối với tôi, có vẻ như câu trả lời này của một công cụ mã nguồn mở tốt khiến câu hỏi bớt "lạc đề" hơn. Tôi không muốn đánh giá các công cụ đã đóng. Có thể câu hỏi cần được xem xét lại, nhưng tôi nghe nói rằng việc tìm kiếm các lựa chọn thay thế cho gdb sau khi tìm thấy nó (gdb) không thực sự được khuyến khích.
Gerry Gleason

15

CẬP NHẬT:

Tôi đã kiểm tra và vui mừng thông báo rằng Phiên bản: 2016.1.3, Bản dựng: 145.1617.8, Phát hành: 5 tháng 6 năm 2016 hoạt động với Delve! Bạn có thể tải về tại đây: https://www.jetbrains.com/idea/download/ . Cũng làm theo hướng dẫn cài đặt Delve tại đây: https://github.com/derekparker/delve/tree/master/Documentation/installation

Nó hơi bong tróc. Ngay sau khi tôi nhận được lời nhắc đăng nhập OSX, gỡ lỗi tương tác bắt đầu hoạt động. Đôi khi, tôi phải gỡ lỗi một chương trình .go đơn giản để bắt đầu nó. Nhưng nó hoạt động và là trải nghiệm gỡ lỗi tương tác tốt nhất cho Go mà tôi đã thấy.

BÀI ĐĂNG GỐC:

Có bất kỳ trình gỡ lỗi tương tác golang nào tồn tại không? Đúng.

Có bất kỳ trình gỡ rối tương tác golang nào, đáng sử dụng, tồn tại không? Không.

Việc định cấu hình GDB trên mac khá tẻ nhạt, nhưng có thể làm được.

Tuy nhiên, khi bắt đầu sử dụng, bạn sẽ sớm nhận ra rằng mình vừa lãng phí thời gian cài đặt nó.

Bạn thậm chí có thể cấu hình IntelliJ để sử dụng nó.

Giá trị duy nhất mà IntelliJ, LiteIDE, CGDB, v.v. dường như cung cấp là bạn có thể nhanh chóng xác định rằng hỗ trợ gỡ lỗi GDB cho Go là cực kỳ kém.

Bạn có thể sử dụng nó để thực hiện một số mã Go, nhưng hãy cố gắng in giá trị của bất kỳ thứ gì khác ngoài các giá trị biến rất đơn giản và bạn sẽ lãng phí thời gian của mình khi muốn có một trình gỡ lỗi tốt.

Dưới đây là một ví dụ về những gì sẽ xảy ra khi bạn cố gắng in giá trị của cấu trúc dữ liệu chuỗi [string] bản đồ bằng CGDB:

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

... mà hoàn toàn vô dụng.

Tiếp theo, hãy thử điều này:

(gdb) print params["UserID"]

... và bạn sẽ nhận được "Lỗi xe buýt".

Delve ( https://github.com/derekparker/delve ) có vẻ đầy hứa hẹn, vì nó được viết bằng Go, nhưng bạn lái nó bằng bảng điều khiển chứ không phải qua IDE.

Tôi sẵn lòng trả tiền cho phiên bản doanh nghiệp của IntelliJ (hoặc bất kỳ IDE nào khác) đã hoạt động tốt khi hỗ trợ gỡ lỗi tương tác trong Go.

Cho đến bây giờ, fmt.Printf("%v", variable)là tốt như nó nhận được.


Không còn nữa! câu trả lời lỗi thời.
Michele Giuseppe Fadda,

mailgun / godebug là một cải tiến lớn; Nó là giá trị sử dụng. Tuy nhiên, thứ rất đáng sử dụng là một IDE có trình gỡ lỗi tương tác, tích hợp. Gỡ lỗi từ bảng điều khiển gợi nhớ đến gỡ lỗi trong những năm 80. Việc thêm công cụ vào mã Go của tôi hoạt động, nhưng hơi khó. Tôi chỉ muốn (bỏ) nhấp vào một hàng mã để (bỏ) đặt điểm ngắt.
l3x

Tôi sẽ trình bày lại ... trình gỡ lỗi dvelve + IDE ý tưởng intelliJ.!
Michele Giuseppe Fadda

Xin chào người dùng4839438, tôi vừa nhận thấy bài đăng của bạn. Sẽ dùng thử. Nếu điều đó hoạt động, chắc chắn sẽ đáng để trả bất kỳ khoản phí nâng cấp JetBrains nào. Và điều đó không quan trọng với tôi, nhưng tôi đã nghe nói rằng trình gỡ lỗi Delve được cho là hoạt động trong MS Visual Studio. Xem marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
Tôi đã kiểm tra và vui mừng thông báo rằng Phiên bản: 2016.1.3, Bản dựng: 145.1617.8, Phát hành: 5 tháng 6 năm 2016 hoạt động với Delve! Bạn có thể tải xuống tại đây: jetbrains.com/idea/download . Cũng làm theo hướng dẫn cài đặt Delve tại đây: github.com/derekparker/delve/tree/master/Documentation/…
l3x Ngày

9

BIÊN TẬP

Trình gỡ lỗi GO hiện là một plugin đơn giản trong IntelliJ hoặc PyCharm, không cần cài đặt bất kỳ thứ gì khác. Chỉ cần tìm plugin Go trong tùy chọn plugin.

Câu trả lời gốc (tháng 11 năm 2015)

cho những người đang tìm kiếm thông tin mới nhất tính đến cuối tháng 11 năm 2015:

đi sâu

https://github.com/derekparker/delve

và làm theo hướng dẫn xây dựng / thiết lập:

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

Tải xuống IntelliJ (15) hoặc PyCharm (5) mới nhất

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

và tải go-lang-plugin trong IDE bạn chọn:

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. Thiết lập một dự án Go mới hoặc Nhập một dự án.
  2. Thiết lập SDK Go của bạn như được nhắc
  3. Thiết lập thư viện Go của bạn (thường trong GOROOT / src
  4. Thiết lập cấu hình Chạy ứng dụng ở góc trên cùng bên phải bằng biểu tượng 'phát':
  5. Chỉnh sửa cấu hình -> nhấp + -> Chuyển đến ứng dụng

Xác định bạn gói hoặc tệp để chạy.

Sau khi thiết lập xong, biểu tượng Play và biểu tượng Gỡ lỗi sẽ hoạt động và bạn có thể đặt breakpoint, đồng hồ, v.v. như bình thường.

Chúc mừng


Đánh giá / xem không hoạt động cho tôi: không thể tìm thấy giá trị biểu tượng cho ... Bạn có thể giải quyết vấn đề này cho bạn không?
Stefan Wuthrich - Altafino

xem và đánh giá dường như hoạt động tốt đối với tôi, trong PyCharm 5.0.3 CE cũng như IntelliJ IDEA 15.0.2
MrE

Bạn thực sự không cần phải xây dựng chuyên sâu, plugin đi kèm với nó được tự động đóng gói.
dlsniper

@dlsniper có phải là gần đây không? Khi tôi thử, tôi đã cài đặt plugin go được một lúc, tôi đã nâng cấp nhưng nó không hoạt động cho đến khi tôi xây dựng sâu.
MrE

@MrE delve đã được vận chuyển cùng với plugin kể từ khi nó được tích hợp, tức là khoảng 3 tháng trước. Nhưng nó chỉ hoạt động trên Linux và Mac OS X cả 64bit.
dlsniper


7

IDE DEBUG ON GO CÓ THỂ (LẠI), THỰC SỰ HOẠT ĐỘNG !

Delve hoạt động khá tốt trên Mac OS X và được hỗ trợ bởi plugin IntelliJ IDEA Go Lang .

Tôi đã kiểm tra điều đó trên Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5

Tôi đã phải chạy qua các vòng lặp thông thường để tạo chứng chỉ tự ký, thêm nó vào vòng hệ thống, v.v. (bắt buộc để chạy trình gỡ lỗi trong Mac OS X). Cuối cùng, tôi đã thiết lập một dự án GO bên trong IntelliJ và được hoàn trả khi lấy lại các tính năng thông thường của trình gỡ lỗi IDE +: thiết lập các điểm ngắt, kiểm tra các biến, bước đơn.

Đó là cách tốt hơn là in ra các giá trị để gỡ lỗi mã.


Bạn có thể giải thích cách bạn thiết lập nó với IntelliJ không? Trình gỡ lỗi phải chạy như một điểm cuối HTTP, phải không?
MrE

nevermind ... đã tìm thấy tài liệu, v.v. nhưng dường như yêu cầu phiên bản mới nhất của PyCharm hoặc IntelliJ để hoạt động tốt.
MrE

Tôi không làm gì đặc biệt, tôi chỉ cài đặt Dvelve và intelliJ 14, Nó vẫn hoạt động chính xác với IntelliJ 15. Về các phiên bản trước: Tôi không biết.
Michele Giuseppe Fadda

7
  1. Tùy chọn một - GDB https://golang.org/doc/gdb

  2. Delve

  3. Visual Studio Code với plugin go của nó (vẫn sử dụng delve).

Cá nhân tôi sử dụng tùy chọn 3. Đối với nó, bạn sẽ cần phải cài đặt chuyên sâu .

Video này cho thấy quá trình gỡ lỗi đang hoạt động: https://youtu.be/uBjoTxosSys?t=16m11s (toàn bộ video rất thú vị).


Delve tuy bị tụt lại phía sau nhưng vẫn tốt hơn IMO khác.
Ostati

1
IMO này là câu trả lời tốt nhất. Tùy chọn số 3 nó cũng là một giải pháp đa nền tảng. Delve có một số hạn chế nhưng gỡ lỗi trực quan cơ bản hoạt động khá tốt.
gideon

1

Tôi khá hài lòng với Gogland ( https://www.jetbrains.com/go/ ) về cơ bản là Intellij có hỗ trợ Go. Nó có một Trình gỡ lỗi đang hoạt động và tiếp tục tốt hơn khi họ đang phát triển điều này. Tôi đã sử dụng nó từ tháng 1 năm 2017 và nó hầu như ổn định đối với tôi trên MBP 2016.

Goland là tên mã của một IDE thương mại mới của JetBrains nhằm cung cấp một môi trường công thái học để phát triển cờ vây.


Rất đẹp! LiteIDE đã hơi ... quá nhẹ. Tôi yêu IntelliJ và sẽ kiểm tra điều này.
Daniel Williams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.