如何调试Go语言编写的程序?

2024-02-21

如何调试 Go 程序?我一直在使用Gedit Go IDE http://gohelp.wordpress.com/,但它没有调试功能。有没有办法单步执行我的代码并检查内存?或者我被打印语句困住了?我可以用吗输出调试字符串 http://msdn.microsoft.com/en-us/library/aa363362(VS.85).aspx?


Update:文档中现在有一个官方页面使用 GDB 调试 Go 代码 http://golang.org/doc/gdb。自编写此答案以来发生了很多变化,并且下面列出的一些限制已被删除。我将把这个答案的其余部分留给后人,但如果你想调试 Go 代码,请点击上面的链接。

Go 链接器now emit http://blog.golang.org/2010/11/debugging-go-code-status-report.html可由 gdb 版本 7.x 解释的 DWARF 调试符号。

上面链接的博客文章中的重点内容:

你可以...

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

目前还存在一些不便之处:

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

有些事情不起作用:

  • 无法检查通道、函数、接口和映射变量。
  • 只有 Go 变量带有类型信息注释;运行时的 C 变量不是。
  • Windows 和 ARM 二进制文件不包含 DWARF 调试信息,因此无法使用 GDB 检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调试Go语言编写的程序? 的相关文章

  • pprof 和 ps 之间的内存使用差异

    我一直在尝试分析用 cobra 构建的 cli 工具的堆使用情况 这pprof工具显示如下 Flat Flat Sum Cum Cum Name Inlined 1 58GB 49 98 49 98 1 58GB 49 98 os Read
  • 我可以调试Exe吗

    我需要比较我的应用程序和工作应用程序之间的一些函数调用和签名 这里我并不是指任何逆向工程或访问其他应用程序的源代码的方法 而是真正需要知道工作应用程序使用的方法和接口是什么 我尝试将我的应用程序附加到 Visual Studio 然后 St
  • 检查远程错误时出错 (val):5 个节点产生错误:未找到对象

    我尝试使用并行处理 parLapply 进行 10 倍交叉验证并估计联合模型的模型性能 我试图找出为什么我收到错误消息 checkForRemoteErrors val 中的错误 五个节点产生错误 未找到对象 Week 代码如下 Valid
  • 调试WCF时无法自动单步进入服务器

    我得到了可怕的 无法自动进入服务器 无法调试远程过程 这通常表明服务器上尚未启用调试 现在 我一直在读我需要添加
  • PhoneGap 应用程序在 Android 上无响应

    我创建了一个简单的 PhoneGap 应用程序 现在只需在您点击按钮时拍摄一张照片 然后在同一页面上的图像中显示该照片 我已经构建了iOS和Android版本 iOS版本运行良好 另一方面 Android 版本突出显示该按钮 但从不切换到相
  • 如何在控制台中访问 Angular2 组件特定数据?

    有没有办法在控制台中访问 Angular2 特定组件的特定数据以进行调试 就像 Angular1 能够在控制台中访问其组件值一样 更新4 0 0 StackBlitz 示例 https stackblitz com edit angular
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • C++ 仪器(诊断)库

    我正在考虑向我的应用程序添加代码 以收集诊断信息以供以后检查 是否有为此目的创建的 C 库 我想做的与分析类似 但又不一样 因为收集的数据将更多地用于调试而不是分析 EDIT 平台 Linux要收集的诊断信息 由应用程序逻辑 各种断言和统计
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • 在调试模式下,使用节点检查器时,mocha 不会停止在规范文件中的调试器语句上

    当我使用 debug brk 运行 mocha 并使用 node inspector 打开 chrome 开发工具时 调试器会跳过我放入规范文件中的任何调试器语句 I can如果我遵循 则让调试器语句在模块文件中工作这个伎俩 https g
  • Chrome 中的 V8 原生语法

    Nodejs 有特殊标志 allow natives syntax 是否可以将这样的东西传递给 Google Chrome 或者也许开发工具提供了其他方式来访问此类信息 running node with allow natives syn
  • 使用 IntelliJ 调试 Java 进程 - 连接到套接字但不连接到目标 VM

    现在已解决 请参阅问题末尾 我正在尝试使用 IntelliJ Community Edition 的调试器来调试 Java 进程 套接字正在侦听 但是当我尝试连接时 调试过程显示以下内容 连接到目标虚拟机 地址 8003 传输 socket
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • pq:函数unnest(未知)不是唯一的

    以下代码工作正常 但我想将 array a b c d e 定义为变量 rows err db Query select colname from SELECT date unnest array a b c d e AS colname
  • 使用 Flutter Flavor 运行调试?

    我正在尝试在 Visual Studio 代码上为我的 flutter 应用程序运行调试模式 单击 运行和调试 但是当我这样做时 我面临以下问题 The Xcode project defines schemes release priva
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • Xamarin:“框架不在模块中”- VS 2013&2015

    我对 XAMARIN 支持感到非常失望 那么 我将从头开始 过去几个月一切都很好 直到我更新了 xamarin 的最新版本 4 0 3 214 结果是我现在无法调试 我收到以下消息 框架不在模块中 我向 Xamarin 支持发送了一封电子邮

随机推荐