在MacOS上使用gdb(cgdb)调试Golang程序
如果你在MacOS上使用GDB工具载入Golang程序时无法载入,这篇文章可以解决。本文不具体介绍调试的方法,网上的文章太多了就不赘述了。
cgdb使用的是gdb的内核,方法和原理试用本文。
问题分析
最近接触Go语言,看了慕课网的这篇文章,里面介绍的Go函数,有一种JavaScript的风格,把我弄迷糊了。记得刚接触JavaScript的时候,什么匿名函数自执行,弄的是晕头转性。决定使用调试器对这篇文章中的示例代码进行调试。
找了很多文章介绍GDB调试Golang程序的文章都不能载入。
Type "apropos word" to search for commands related to "word"...
Reading symbols from gen...(no debugging symbols found)...done.
Loading Go Runtime support.
应该是这些文章的作者都用的Linux操作系统吧,在我这里不起作用。Go语言的官网文档也没有提到这个问题。
通过查阅stackoverflow,才找到解决的方法。
解决方法
- 在执行
go build
的时候添加-ldflags=-compressdwarf=false
参数。或,添加以下环境变量export GOFLAGS="-ldflags=-compressdwarf=false"
。
图片中的12行源代码版权归慕课网所有,仅供效果展示,无意侵犯。
其他问题
如果你发生了上面的问题,很有可能可出现了这个问题
During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
解决方法降级gdb到8.01,如果你使用brew安装的,可以参考 https://stackoverflow.com/questions/49001329/gdb-doesnt-work-on-macos-high-sierra-10-13-3
brew unlink gdb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
- (可选)
brew pin gdb
防止gdb更新
参考资料:https://stackoverflow.com/questions/52534287/debug-go-program-with-gdb-on-macos https://groups.google.com/forum/#!topic/golang-nuts/LlgN1qpbRE8 https://golang.org/doc/gdb
在MacOS上使用gdb(cgdb)调试Golang程序的更多相关文章
- LINUX上使用GDB单步调试Chromium Android C++代码。
###动机###在LINUX使用GDB单步调试Chromium Android C++代码. [1]编译android平台Chromium, 修改GN文件中编译选项:-g -O0 使得编译优化更少,便 ...
- 在海思芯片上使用GDB远程调试
1 前言 使用海思平台上(编译工具链:arm-himix200-linux)交叉编译 GDB 工具(使用版本8.2,之前用过10.2的版本,在编译 gdbserver 遇到编译出错的问题,因为关联了其 ...
- Visual Studio 2015中使用gdb远程调试linux程序
VS的debug功能非常强大,相比而言linux上的图形化调试一直不是很好用. 如果可以使用VS来调试linux程序,应该是一件比较愉快的事情. 这在2015中变得可能,因为从2015开始VS支持An ...
- 29、应用调试之使用GDB来调试应用程序
说明:gdb可以实现源代码单步调试 原理: 1.gdb在PC机上运行,gdbserver在arm开发板上运行,gdbserver在开发板上相当于父进程,应用相当于子进程,PC上gdb发命令给gdbse ...
- 关于macOS Sierra无法使用gdb进行调试的解决方案
1.对gdb进行签名,签名过程详见:http://jingyan.baidu.com/article/d169e1864dc24d436611d839.html: 2.重新启动系统,同时按住键盘上的c ...
- windows下使用MinGW的调试工具gdb.exe调试C程序
1.编译源代码 C:MinGW\bin>gcc.exe -g -o program.exe program.c 编译选项上要加上“g”,这样生成的目标程序会含有调试内容,再用gdb调试的时候才能 ...
- gdb 断点调试C程序
最近在看CS50的公开课,视频中david用gdb调试C,我跟着敲,一样的代码但是却显示效果与他不一样.因为他的程序是编译好了的,所以也没看到编译步骤,后来回想一下他make 文件名 显示的代码中有一 ...
- Golang程序调试工具介绍(gdb vs dlv)
原文:http://lday.me/2017/02/27/0005_gdb-vs-dlv/ 通过log库输出日志,我们可以对程序进行异常分析和问题追踪.但有时候,我也希望能有更直接的程序跟踪及定位工具 ...
- macOS上实现Qt应用程序做文件关联打开
一.背景介绍 用Qt开发的应用程序要实现文件关联,双击时用默认关联的程序打开文件,在Windows上这个功能非常容易实现.Windows应用程序在安装的时候可以在注册表中写入相关的键值对.打开文件的时 ...
随机推荐
- [转帖]oracle改版sql server问题点汇总
https://www.cnblogs.com/zhangdk/p/oracle_sqlserver.html 只记得 最开始的时候看过 没有具体的了解里面的特点 原作者总结的很好 留下来 以后说不定 ...
- Granfana+PostgreSQL
建表: create table pdm_log( id serial primary key, date_time timestamp with time zone DEFAULT CURRENT_ ...
- AVL树,红黑树
AVL树 https://baike.baidu.com/item/AVL%E6%A0%91/10986648 在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高 ...
- JMeter 连接 sql server
1.安装驱动 http://www.microsoft.com/zh-CN/download/details.aspx?id=11774 下载后解压后复制sqljdbc.jar到 “jmeter的安装 ...
- Ubuntu16.04 启动纯文本界面方法
问题: Ubuntu16.04 如何启动纯文本界面. 解决方法: 1.系统启动后,在登陆界面点击Ctrl+Shift+F1切换到文本登陆界面: 2.修改为默认从文本界面登陆: sudo vi /etc ...
- (转载)C#使用MemoryStream类读写内存
MemoryStream和BufferedStream都派生自基类Stream,因此它们有很多共同的属性和方法,但是每一个类都有自己独特的用法.这两个类都是实现对内存进行数据读写的功能,而不是对持久性 ...
- Lodop输出页面input文本框的最新值
默认使用Lodop打印页面上的文本框等,会发现虽然页面上文本框输入了值,打印预览却是空的,这是由于没有把最新的值传入Lodop. 如图,演示的是Lodop如何输出文本框内的新值,这里整个页面只有inp ...
- 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- url.openconnection() 设置超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); System.setP ...
- BZOJ2038[2009国家集训队]小Z的袜子(hose)——莫队
题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号 ...