MacOS 上Golang Delve 調(diào)試填坑

Dlv懂昂,也稱為Delve千所,是Go語(yǔ)言的源碼調(diào)試工具狂魔。由derekparker開(kāi)發(fā),開(kāi)源與Github淫痰。在Mac上配置Go語(yǔ)言開(kāi)發(fā)環(huán)境的時(shí)候最楷,經(jīng)常碰到的問(wèn)題就是Dlv調(diào)用總是不成功,無(wú)法啟動(dòng)應(yīng)用待错,無(wú)法調(diào)試等等籽孙。大部分的問(wèn)題都與Mac的安全機(jī)制有關(guān)。Mac上使用codesign對(duì)應(yīng)用進(jìn)行簽名火俄,沒(méi)有簽名的程序會(huì)受到一些限制犯建,例如無(wú)法作為調(diào)試程序。

Delve的安裝有兩種方式:

前提

需要安裝Xcode命令行工具瓜客,運(yùn)行以下命令安裝:

$ xcode-select --install

否則會(huì)出現(xiàn)以下錯(cuò)誤:

could not launch process: exec: "lldb-server": executable file not found in $PATH

1. 手動(dòng)安裝

生成證書(shū)和簽名部分參考:安裝Go語(yǔ)言調(diào)試工具dlv
delve下載可以運(yùn)行一下命令:

$ go get github.com/derekparker/delve/cmd/dlv

go get 會(huì)直接編譯安裝dlv适瓦,證書(shū)生成后需要運(yùn)行以下命令對(duì)dlv進(jìn)行簽名

$ CERT=dlv-cert make install

2. HomeBrew安裝

運(yùn)行一下命令:

$ brew install go-delve/delve/delve

理論上來(lái)說(shuō)按照上述兩種方式就可以正常調(diào)試go程序了,但是現(xiàn)實(shí)總是喜歡打臉谱仪,下面就是筆者按照這兩種方式進(jìn)行操作所遇到的一些坑以及找到的解決方案玻熙。

填坑

  • 嘗試啟動(dòng)調(diào)試出現(xiàn)如下錯(cuò)誤:

could not launch process: stub exited while waiting for connection: exit status 0
Process exiting with code: 1

解決方案:在配置文件launch.json中加入如下參數(shù)(原理不明):

"backend": "native"
  • 筆者手動(dòng)生成證書(shū)并進(jìn)行簽名后,調(diào)試的時(shí)候始終遇到如下錯(cuò)誤:

could not launch process: could not fork/exec

手動(dòng)和homebrew安裝的本質(zhì)其實(shí)是一樣的疯攒,只不過(guò)homebrew安裝的過(guò)程中會(huì)自動(dòng)生成證書(shū)并對(duì)編譯好的dlv文件進(jìn)行簽名嗦随。經(jīng)過(guò)分析基本可以確定是手動(dòng)生成的證書(shū)的問(wèn)題(目前還未發(fā)現(xiàn)證書(shū)的問(wèn)題出在哪)

  • 接著嘗試homebrew安裝,還是不順利(心好累)卸例,通過(guò)在安裝命令中加入verbose參數(shù)來(lái)看看到底哪出問(wèn)題了
$ brew install go-delve/delve/delve --verbose
==> Installing delve from go-delve/delve
/usr/bin/sandbox-exec -f /private/tmp/homebrew20180830-36206-1aeuzhj.sb nice /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/bin/ruby -W0 -I /usr/local/Homebrew/Library/Homebrew:/usr/local/Homebrew/Library/Homebrew/cask/lib -- /usr/local/Homebrew/Library/Homebrew/build.rb /usr/local/Homebrew/Library/Taps/go-delve/homebrew-delve/Formula/delve.rb --verbose
==> Downloading https://github.com/derekparker/delve/archive/v1.0.0.tar.gz
Already downloaded: /Users/xiongrudy/Library/Caches/Homebrew/delve-1.0.0.tar.gz
==> Verifying delve-1.0.0.tar.gz checksum
tar xf /Users/xiongrudy/Library/Caches/Homebrew/delve-1.0.0.tar.gz -C /private/tmp/delve-20180830-36208-krq4cf
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
==> Generating dlv-cert
==> openssl req -new -newkey rsa:2048 -x509 -days 3650 -nodes -config dlv-cert.cfg -extensions codesign_reqext -batch -out dlv-cert.cer -keyout dlv-cert.key
Generating a 2048 bit RSA private key
...........................+++
...........................+++
writing new private key to 'dlv-cert.key'
-----
==> [SUDO] Installing dlv-cert as root
==> sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain dlv-cert.cer
Failed to execute: sudo

Failed to execute: sudo, 好吧那就是權(quán)限的問(wèn)題了(可能是系統(tǒng)的問(wèn)題吧)
但是homebrew安裝沒(méi)有讓用戶輸入password呀称杨,那就去手動(dòng)執(zhí)行安裝腳本吧,
可以看到delve-1.0.0.tar.gz這個(gè)包是已經(jīng)下載下來(lái)了筷转,接著進(jìn)入到HomeBrew目錄,執(zhí)行以下命令

$ cd $HOME/Library/Caches/Homebrew
$ tar xf delve-*.gz
$ cd delve-1.0.0 (我的是 delve-1.0.0 )
$ sh scripts/gencert.sh

再次執(zhí)行安裝:

$ brew install go-delve/delve/delve --verbose
==> Installing delve from go-delve/delve
/usr/bin/sandbox-exec -f /private/tmp/homebrew20180830-37438-hfl3m9.sb nice /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/bin/ruby -W0 -I /usr/local/Homebrew/Library/Homebrew:/usr/local/Homebrew/Library/Homebrew/cask/lib -- /usr/local/Homebrew/Library/Homebrew/build.rb /usr/local/Homebrew/Library/Taps/go-delve/homebrew-delve/Formula/delve.rb --verbose
==> Downloading https://github.com/derekparker/delve/archive/v1.0.0.tar.gz
Already downloaded: /Users/xiongrudy/Library/Caches/Homebrew/delve-1.0.0.tar.gz
==> Verifying delve-1.0.0.tar.gz checksum
tar xf /Users/xiongrudy/Library/Caches/Homebrew/delve-1.0.0.tar.gz -C /private/tmp/delve-20180830-37440-1fuuoa5
==> dlv-cert is already installed, no need to create it
==> make build BUILD_SHA=v1.0.0
go build -ldflags="-s -X main.Build=v1.0.0" github.com/derekparker/delve/cmd/dlv
codesign -s "dlv-cert"  ./dlv
==> Cleaning
==> Finishing up
ln -s ../Cellar/delve/1.0.0/bin/dlv dlv

沒(méi)毛病悬而,終于成功了(可以看到提示證書(shū)已經(jīng)安裝了呜舒,不需要再創(chuàng)建了)

事實(shí)上,你如果用這個(gè)證書(shū)再對(duì)手動(dòng)安裝的dlv進(jìn)行簽名也是可以的(筆者親測(cè)可用笨奠,看來(lái)手動(dòng)生成的證書(shū)確實(shí)是有問(wèn)題的袭蝗,雖然我也沒(méi)去研究問(wèn)題在哪)

再次啟動(dòng)調(diào)試唤殴,搞定??,如下圖:


參考鏈接:https://github.com/go-delve/delve/blob/master/Documentation/installation/osx/install.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末到腥,一起剝皮案震驚了整個(gè)濱河市朵逝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乡范,老刑警劉巖配名,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晋辆,居然都是意外死亡渠脉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)瓶佳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芋膘,“玉大人,你說(shuō)我怎么就攤上這事霸饲∥螅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵厚脉,是天一觀的道長(zhǎng)习寸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)器仗,這世上最難降的妖魔是什么融涣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任折汞,我火速辦了婚禮吹菱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞬逊。我一直安慰自己轨香,他們只是感情好忽你,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著臂容,像睡著了一般科雳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脓杉,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天糟秘,我揣著相機(jī)與錄音,去河邊找鬼球散。 笑死尿赚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凌净,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼悲龟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了冰寻?” 一聲冷哼從身側(cè)響起须教,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斩芭,沒(méi)想到半個(gè)月后轻腺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秒旋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年约计,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迁筛。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煤蚌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出细卧,到底是詐尸還是另有隱情尉桩,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布贪庙,位于F島的核電站蜘犁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏止邮。R本人自食惡果不足惜这橙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望导披。 院中可真熱鬧屈扎,春花似錦、人聲如沸撩匕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)止毕。三九已至模蜡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扁凛,已是汗流浹背忍疾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谨朝,地道東北人膝昆。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓丸边,卻偏偏與公主長(zhǎng)得像叠必,于是被迫代替她去往敵國(guó)和親荚孵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354