如何调试围棋程序?我一直在用Gedit Go IDE,但它没有调试.有没有办法遍历我的代码并判断内存?或者我被困在打印报表上了?我可以用OutputDebugString吗?

推荐答案

Update:现在文档中有一个关于Debugging Go Code with GDB的官方页面.自 compose 此答案以来,许多情况都发生了变化,下面列出的几个限制也已删除.我将把这个答案的睡觉留给后人,但是如果你想调试Go代码,请点击上面的链接.

Go链接器now emit个可由gdb版本7解释的调试符号.十、

从上面链接的博客文章中突出显示:

你可以...

  • 在GDB 7.x版中加载GO程序
  • 逐行列出所有GO、C和汇编源文件(GO运行时的部分是用C和汇编语言编写的),
  • 按行设置断点并逐步遍历代码,
  • 打印堆栈跟踪和判断堆栈帧,以及
  • 找到地址并打印大多数变量的内容.

还有一些不便之处:

  • MacOSX附带的GDB版本6.x无法读取发出的DWARF代码.我们很乐意接受补丁以使DWARF输出与标准的OS X GDB兼容,但在此问题得到解决之前,您需要下载、构建并安装GDB 7.x才能在OS X下使用它.源代码可以在http://sourceware.org/gdb/download/找到.由于OSX的特殊性,您需要使用chgrp、procmod和chmod g+s在本地文件系统上安装二进制文件.
  • 名称是用包名限定的,由于GDB不理解Go包,所以您必须以其全名引用每个项目.例如,包main中名为v的变量必须称为"main".v',单引号.这样做的结果是,变量和函数名的制表符完成不起作用.
  • 词法范围信息有些模糊.如果有多个同名变量,则第n个实例将有一个形式为"#n"的后缀.我们计划解决这个问题,但需要对编译器和链接器之间交换的数据进行一些更改.
  • 片和字符串变量在运行时库中表示为其底层 struct .它们将类似于{data=0x2aaaaab3e320,len=1,cap=1}.对于切片,必须取消引用数据指针才能判断元素.

有些东西不起作用:

  • 无法判断通道、函数、接口和映射变量.
  • 只有GO变量使用类型信息进行注释;运行库的C变量没有.
  • Windows和ARM二进制文件不包含DWARM调试信息,因此不能使用GDB进行判断.

Go相关问答推荐

Kafka消费者在需要时不会暂停

Go中的Slice[:1][0]与Slice[0]

重新赋值变量时未清除动态类型-这是错误吗?

无效操作:v > max(类型参数 T 与 > 不可比较)

为什么 mux.Vars() 返回空的 map[]

使用 httptest 对 http 请求进行单元测试重试

GoLang:net.LookupHost 返回重复的 ips

Golang - POST 失败(NoSurf CSRF)

helm :将 YAML 转换为 JSON 时出错:yaml:第 xx 行:未找到预期的密钥

如何过滤来自 fsnotify 的重复系统消息

如何在切片增长时自动将切片的新元素添加到函数参数

在恒等函数中将类型 T 转换为类型 U

速率限制特定端点

如何使用 Go 获取 X11 中的窗口列表

切片到数组指针的转换

panic :拨号 tcp:在 172.22.64.1:53 上查找 bookstoreDB:没有这样的主机

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

如何使用 fyne 避免 GUI 应用程序中的循环依赖?

如何在 Prometheus 中正确检测区域和环境信息?

有没有一种方法可以确保传递的值具有使用泛型的某些字段?