首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GoClipse调试Go程序?

如何使用GoClipse调试Go程序?
EN

Stack Overflow用户
提问于 2014-07-04 02:54:54
回答 2查看 8.1K关注 0票数 3

我在OS X Mavericks上使用Go (go1.3darwin/amd6)和GoClipse 0.8 ...

运行调试器有问题(在设置断点之后),所以我搜索了Stack Overflow和Internet的其余部分,发现我需要安装gdb。

遵循以下说明(到T) (通过HomeBrew安装gdb ):

http://ntraft.com/installing-gdb-on-os-x-mavericks/

现在,当我放置一个断点并通过Eclipse的调试器运行go程序时,它单步执行汇编代码而不是Go代码:

例如:

在我的go程序中设置了一个断点:

代码语言:javascript
复制
responses := [] *HttpResponse{}

当我运行调试器时,它打开了一个名为的文件:

rt0_darwin_amd64.s

设置它的代码行是:

代码语言:javascript
复制
MOVQ    $_rt0_go(SB), AX

当我试图“跨过”我的代码时,它在这些汇编文件中一直这样做……

我不知道汇编(我想我没有时间去学习它)……有没有使用Eclipse调试器调试Go程序的简单方法?

EN

回答 2

Stack Overflow用户

发布于 2014-07-08 20:46:38

当Go程序停止时,Debug视图显示什么?( Debug视图显示堆栈跟踪)。它是否显示类似于以下内容的堆栈跟踪:

代码语言:javascript
复制
Thread [1] 0 (Suspended : Breakpoint)   
    main() at rt0_windows_amd64.s:15 0x42a400   
    KERNEL32!BaseThreadInitThunk() at 0x773259ed    
    0x0 

(注意:对于OSX,它应该是main() at rt0_darwin_amd64.s)

如果是这样,情况是这样的:当您启动程序时,它会在程序启动时在"main“函数上自动停止。但这不是Go main,而是一个内部运行时"main“函数,它的代码是用C编写的(并且没有源代码,这就是为什么您会看到汇编程序)。这由启动配置选项中的第一个选项控制,如下所示:

您可以将其更改为"main.main“以在实际的Go main上停止,也可以取消选中它。在任何情况下,如果调试器停在那里,您只需单击Run / Resume (F8)继续。

票数 5
EN

Stack Overflow用户

发布于 2014-07-10 23:39:22

我认为正在发生的事情是从二进制文件中剥离了调试信息。

确保在调试模式下编译二进制文件时,添加了http://golang.org/doc/gdb中记录的-gcflags "-N -l"标志

由gc编译器生成的代码包括内联函数调用和变量注册。这些优化有时会使使用gdb进行调试变得更加困难。要在调试时禁用它们,请将标志-gcflags "-N -l“传递给用于构建正在调试的代码的go命令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24561329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档