我在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程序中设置了一个断点:
responses := [] *HttpResponse{}当我运行调试器时,它打开了一个名为的文件:
rt0_darwin_amd64.s
设置它的代码行是:
MOVQ $_rt0_go(SB), AX当我试图“跨过”我的代码时,它在这些汇编文件中一直这样做……
我不知道汇编(我想我没有时间去学习它)……有没有使用Eclipse调试器调试Go程序的简单方法?
发布于 2014-07-08 20:46:38
当Go程序停止时,Debug视图显示什么?( Debug视图显示堆栈跟踪)。它是否显示类似于以下内容的堆栈跟踪:
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)继续。
发布于 2014-07-10 23:39:22
我认为正在发生的事情是从二进制文件中剥离了调试信息。
确保在调试模式下编译二进制文件时,添加了http://golang.org/doc/gdb中记录的-gcflags "-N -l"标志
由gc编译器生成的代码包括内联函数调用和变量注册。这些优化有时会使使用gdb进行调试变得更加困难。要在调试时禁用它们,请将标志-gcflags "-N -l“传递给用于构建正在调试的代码的go命令。
https://stackoverflow.com/questions/24561329
复制相似问题