精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

學會使用 GDB 調(diào)試 Go 代碼

開發(fā) 后端
GDB 是一個類 UNIX 系統(tǒng)下的程序調(diào)試工具,允許你看到另一個程序在執(zhí)行時 "內(nèi)部 "發(fā)生了什么,或者程序在崩潰時正在做什么。

[[413707]]

本文轉(zhuǎn)載自微信公眾號「腦子進煎魚了」,作者陳煎魚。轉(zhuǎn)載本文請聯(lián)系腦子進煎魚了公眾號。

大家好,我是煎魚。

上一篇文章《一個 Demo 學會使用 Go Delve 調(diào)試》我們詳細介紹了 Go 語言如何使用 Delve 進行排查和調(diào)試,對于問題的解決非常的有幫助。

但調(diào)試工具肯定不止只有 Delve,今天我們來介紹第二個神器,那就是:GDB,補全我們的調(diào)試工具技術(shù)棧。

根據(jù)小伙伴們的反饋,我們后面再增加 IDE 的調(diào)試篇章。

GDB 是什么

GDB 是一個類 UNIX 系統(tǒng)下的程序調(diào)試工具,允許你看到另一個程序在執(zhí)行時 "內(nèi)部 "發(fā)生了什么,或者程序在崩潰時正在做什么。

主要可以做四類事情:

  • 啟動你的程序,指定任何可能影響其行為的東西。
  • 使你的程序在指定的條件下停止。
  • 檢查當你的程序停止時發(fā)生了什么。
  • 改變你程序中的東西,這樣你就可以試驗糾正一個錯誤的影響,并繼續(xù)了解另一個錯誤。

安裝

如果是在 MacOS 上的話,可以直接使用 brew 安裝:

  1. brew install gdb 

如果是在 Linux ,則使用自帶的包管理工具進行安裝即可,但需要注意安裝完畢后需要在 HOME 目錄進行相關(guān)配置。

安裝完畢后,執(zhí)行 gdb 就可以看到:

  1. $ gdb 
  2. GNU gdb (GDB) 10.2 
  3. ... 
  4. (gdb)  

寫此文時最新的 gdb 版本已經(jīng)是 10.2 了,我也升級了上去。問題不大,還多了不少功能。

編譯

我們還是使用先前的演示程序來進行調(diào)試。但由于 Go 語言的不少編譯優(yōu)化,因此在編譯運行程序時,有以下幾點需要注意:

  • go build 編譯時需要增加 -gcflags=all="-N -l" 指令來關(guān)閉內(nèi)聯(lián)優(yōu)化,方便接下來的調(diào)試。
  • 若是 MacOS,在 go build 編譯時需要增加 -ldflags='-compressdwarf=false' 指令。
    • 若不禁止,則會出現(xiàn) No symbol table is loaded. Use the "file" command. 的錯誤。
    • Go 編譯默認為了減少二進制大小會默認壓縮 DWARF 調(diào)試信息,但這會影響 gdb 的調(diào)試,因此需要將其關(guān)閉。

編譯的命令是:

  1. $ go build -gcflags=all="-N -l" -ldflags='-compressdwarf=false' . 

輸出結(jié)果:

  1. !了魚煎進子腦 

嘗試 gdb

GDB 有兩種調(diào)試模式,分別是文本用戶界面(Text User Interface,簡稱 tui)和默認的命令行模式:

  1. // 調(diào)試界面 
  2. $ gdb -tui ./awesome-project 
  3.  
  4. // 命令行模式 
  5. $ gdb ./awesome-project 

接下來我們使用 gdb tui 的調(diào)試模式來給大家演示功能。

我們在執(zhí)行命令 gdb -tui ./awesome-project 后,窗口會切換為如下:

gdb tui 初始樣子

你會發(fā)現(xiàn)中間提示 “No Source Available”,此時你需要繼續(xù)回車兩次,他就會自動加載插件支持,提示:“Loading Go Runtime support.”。

我們就可以看到具體的代碼塊內(nèi)容,如下:

用 MacOS 的同學需要注意,如果你在斷點時發(fā)現(xiàn)發(fā)現(xiàn)了如下錯誤:

  1. (gdb) b main.main 
  2. Breakpoint 1 at 0x10a2ea0: file /Users/eddycjy/go-application/awesomeProject/main.go, line 15. 
  3. (gdb) r 
  4. Starting program: /Users/eddycjy/go-application/awesomeProject/hello 
  5. Unable to find Mach task port for process-id 64212: (os/kern) failure (0x5). 
  6.  (please check gdb is codesigned - see taskgated(8)) 

也就是 “please check gdb is codesigned - see taskgated(8)”,則需要重新處理證書認證和授權(quán),是 MacOS 使用上的一個問題,具體可參考:《Codesign gdb on OSX》。

解決后,咱們的 gdb 就算是能夠正確的運行起來了!

常用 gdb 命令

在 gdb 中,和 dlv 一樣有常用的關(guān)鍵字命令。當然了,gdb 的 help all 輸出非常多:

  1. (gdb) help all 
  2.  
  3. Command class: aliases 
  4. Command class: breakpoints 
  5.  
  6. awatch -- Set a watchpoint for an expression. 
  7. break, brea, bre, br, b -- Set breakpoint at specified location. 
  8. break-range -- Set a breakpoint for an address range. 
  9. catch -- Set catchpoints to catch events. 
  10. ... 

常用的關(guān)鍵字如下:

  • b:break 的縮寫,作用是打斷點,例如:main.main,可帶代碼行數(shù)。
  • r:run 的縮寫,作用是運行程序到下一個斷點處。
  • c:continue 的縮寫,作用是繼續(xù)執(zhí)行到下一個斷點。
  • s:step 的縮寫,作用是單步執(zhí)行,如果有所調(diào)用的方法,將會進入該方法。
  • l:list 的縮寫,作用是查看對應的源碼。
  • n:next 的縮寫,作用是單步執(zhí)行,不會進入所調(diào)用的方法,。
  • q:quit 的縮寫,作用是退出。
  • info breakpoints:作用是查看所有設(shè)置的斷點信息。
  • info locals:作用是查看變量信息。
  • info args:作用是查看函數(shù)的入?yún)⒑统鰠⒌木唧w值。
  • info goroutines:作用是查看 goroutines 的信息。
  • goroutine 1 bt:作用是查看指定序號的 goroutine 調(diào)用堆棧。

進行調(diào)試

在調(diào)試上與 dlv 差不多,也是先執(zhí)行關(guān)鍵字 b 打斷點:

  1. (gdb) b main.main 
  2. Breakpoint 1 at 0x10cbaa0: file /Users/eddycjy/go-application/awesomeProject/main.go, line 9. 

也可以先執(zhí)行關(guān)鍵字 l 查看對應的代碼情況再進行做決定:

  1. (gdb) l main.main 
  2. 4  "fmt" 
  3. 5  
  4. 6  "github.com/eddycjy/awesome-project/stringer" 
  5. 7 ) 
  6. 8  
  7. 9 func main() { 
  8. 10  fmt.Println(stringer.Reverse("腦子進煎魚了!")) 
  9. 11 } 

查看對應 goroutines 正在運行的函數(shù)情況:

  1. (gdb) info goroutines 
  2.   1  waiting runtime.gosched 
  3. * 13  running runtime.goexit 

根據(jù) pprof 等所得到的 goroutine 序號進行進一步的分析:

  1. (gdb) goroutine 1 bt 
  2. #0  0x000000000040facb in runtime.gosched () at /home/user/go/src/runtime/proc.c:873 
  3. #1  0x00000000004031c9 in runtime.chanrecv (c=void, ep=void, selected=void, received=void) 
  4.  at  /home/user/go/src/runtime/chan.c:342 
  5. #2  0x0000000000403299 in runtime.chanrecv1 (t=void, c=void) at/home/user/go/src/runtime/chan.c:423 
  6. #3  0x000000000043075b in testing.RunTests (matchString... 

注意一個細節(jié),gdb 調(diào)試是可以看到并對 runtime 包內(nèi)容的代碼進行斷點和分析的。

也可以和 dlv 一樣執(zhí)行 p 關(guān)鍵字輸出相應的值的類型、值內(nèi)容:

  1. (gdb) p re 
  2. (gdb) p t 
  3. $1 = (struct testing.T *) 0xf840688b60 
  4. (gdb) p t 
  5. $1 = (struct testing.T *) 0xf840688b60 
  6. (gdb) p *t 
  7. $2 = {errors = "", failed = false, ch = 0xf8406f5690} 
  8. (gdb) p *t->ch 
  9. $3 = struct hchan<*testing.T> 

與 dlv 大同小異。

總結(jié)

總體上來講,MacOS 上使用 gdb 還是挺麻煩的,在 Linux 環(huán)境下使用 gdb 還是更方便些。

由于 dlv 和 gdb 在大致的調(diào)試上不會差距的太遠,因此本文就沒有過于展開。

若是對業(yè)務(wù)代碼進行分析,更建議使用 dlv,也就是我們上一篇文章所講的內(nèi)容。若有 runtime 庫的調(diào)試需求的話,推薦使用 gdb 來作為首要調(diào)試工具,若無這方面訴求,建議使用 dlv。

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關(guān)推薦

2021-07-26 10:14:38

Go語言工具

2015-08-14 09:21:09

gdb工具調(diào)試 Go

2021-03-15 06:23:40

GDB調(diào)試代碼編程語言

2023-11-10 09:20:28

Java工具

2013-12-19 09:20:59

2023-12-27 07:40:43

HTTP服務(wù)器負載均衡

2021-12-28 07:20:43

Hippo WebAssembly云原生

2025-03-31 03:25:00

2009-11-05 15:25:36

WCF服務(wù)端配置

2023-06-28 08:12:49

Python代碼重構(gòu)

2015-11-06 13:37:25

Git配置文件Linux

2023-09-26 01:03:36

Pandas數(shù)據(jù)數(shù)據(jù)集

2024-03-19 00:10:00

aiofilesPython開發(fā)

2021-07-26 05:07:23

Swift萬花尺代碼

2017-02-06 18:42:37

Linuxgdb程序

2022-07-25 07:57:19

工具代碼調(diào)試

2021-10-09 10:50:30

JavaScript編程開發(fā)

2021-05-30 07:56:51

QSettingsLog4Qt變量

2020-01-02 15:16:51

Nginx反向代理服務(wù)器

2022-01-17 07:50:37

Go代碼規(guī)范
點贊
收藏

51CTO技術(shù)棧公眾號

日本中文在线视频| 激情五月开心婷婷| 成人久久久精品国产乱码一区二区 | 欧美激情第3页| 中文字幕在线观看网站| gogo大胆日本视频一区| 日本精品久久久| 大吊一区二区三区| 视频一区在线| 91精品91久久久中77777| 亚洲精品国产精品久久| 亚洲风情第一页| 中文在线字幕免费观| 女人让男人操自己视频在线观看| 久久久国产综合精品女国产盗摄| 91视频88av| 国产精品免费精品一区| 偷偷www综合久久久久久久| 亚洲国产高清自拍| 手机免费av片| 电影一区二区三| 亚洲激情综合网| 视频在线99re| 日本免费不卡视频| 激情综合色播激情啊| 欧美最猛性xxxxx(亚洲精品)| 老熟妻内射精品一区| 九九久久精品| 亚洲成人精品在线| 在线播放免费视频| 日日夜夜天天综合| 午夜久久福利影院| 日韩成人午夜影院| 成人亚洲综合天堂| 久久夜色精品国产欧美乱极品| 91成人伦理在线电影| 亚洲 小说区 图片区| 99视频精品| 久久久久久国产精品三级玉女聊斋 | 先锋影音亚洲资源| 四虎在线免费观看| 成人免费视频视频在线观看免费| 成人在线视频福利| 亚洲av综合一区| 亚洲综合日韩| 91禁外国网站| 国产午夜久久久| 欧美午夜影院| 欧美日韩电影在线观看| 神马午夜精品91| 91一区二区三区四区| 在线播放精品一区二区三区 | 超碰精品在线观看| 精品少妇av| 午夜天堂影视香蕉久久| 女人床在线观看| 顶级网黄在线播放| 日韩理论片一区二区| 一区二区三区精品国产| 在线视频1区2区| 国产精品久久久久久久久动漫| 亚洲成人18| 国产黄色免费在线观看| 中文字幕不卡在线播放| 亚洲第一综合| 麻豆网站在线观看| 一区二区三区不卡视频| 女人床在线观看| 国产美女福利在线观看| 亚洲福利一二三区| 福利视频一区二区三区四区| 国产高清在线a视频大全| 亚洲国产aⅴ天堂久久| 97超碰在线人人| 国产免费拔擦拔擦8x高清在线人 | 久久国产免费观看| 亚洲性色视频| 欧美一级电影在线| 久久久久久久久久一级| 美日韩一区二区| 91香蕉视频在线下载| 黄色一级大片在线免费看国产| www.亚洲色图| 日本一区二区三区免费看| 日本中文字幕在线看| 成人欧美一区二区三区在线播放| 欧美精品久久96人妻无码| 在线xxxx| 色综合久久66| 国产传媒免费观看| 日韩第一区第二区| 精品呦交小u女在线| 精品熟妇无码av免费久久| 中文字幕一区二区三区乱码图片 | 特一级黄色大片| av在线免费播放| 亚洲一区二区3| av片中文字幕| 国产精品**亚洲精品| 日韩av在线播放资源| 精品人伦一区二区| 欧美日韩国产精品一区二区亚洲| 91产国在线观看动作片喷水| 中文字幕网址在线| 成人美女视频在线观看18| 日韩一区不卡| 第一av在线| 欧美日韩中文国产| 国产xxxxxxxxx| 久久日文中文字幕乱码| 91精品国产色综合| 国产精品天天操| 久久夜色精品国产欧美乱极品| 精品一区二区三区毛片| 性欧美hd调教| 亚洲白虎美女被爆操| 国产白丝一区二区三区| 亚洲男人影院| 国产精品二区在线观看| 在线观看美女网站大全免费| 天天综合色天天| 日韩av加勒比| 精品久久91| 97成人在线视频| 精品国产一级片| 欧美高清在线精品一区| 久久久久久久久久久视频| 一区二区三区日本视频| 亚洲视频在线观看视频| 日本天堂网在线观看| 狠狠色丁香久久婷婷综| 日韩中文一区| xx欧美视频| 亚洲精品成人久久电影| 久久激情免费视频| 国产综合色在线视频区| 亚洲欧洲在线一区| 成人啊v在线| 亚洲毛片在线观看| 国产精品100| av高清不卡在线| 国产一区 在线播放| 精品国产伦一区二区三区观看说明| 国产.精品.日韩.另类.中文.在线.播放| 亚洲精品一线二线三线| 潮喷失禁大喷水aⅴ无码| 视频一区视频二区中文字幕| 麻豆一区区三区四区产品精品蜜桃| 色www永久免费视频首页在线| 欧美高清一级片在线| 日韩欧美在线视频播放| 美女www一区二区| 日韩精品一区二区三区外面| 华人av在线| 亚洲精品国产精品国自产观看浪潮 | 91一区二区视频| 国产女主播一区| 91av俱乐部| 波多野结衣在线观看一区二区三区 | 久久青草伊人| 日韩av在线一区二区| 精品在线播放视频| jvid福利写真一区二区三区| 久久久久久久久久网| 日韩成人av在线资源| 青青久久av北条麻妃黑人| 青青色在线视频| 色999日韩国产欧美一区二区| 欧美做受高潮6| 奇米888四色在线精品| 亚洲午夜精品国产| 国产亚洲观看| 久久久伊人欧美| 亚洲色图狠狠干| 在线免费一区三区| 激情高潮到大叫狂喷水| 极品少妇xxxx偷拍精品少妇| 黄色一级视频播放| 女仆av观看一区| 国产精品久久久久久久久久ktv | 欧美激情欧美激情在线五月| 亚洲aⅴ乱码精品成人区| 色乱码一区二区三区88| 免费黄色激情视频| 国产成人综合在线播放| 精品久久一二三| 日韩激情图片| 久久精品国产精品亚洲精品| 久久偷看各类wc女厕嘘嘘偷窃| 神马久久资源| 欧美精品生活片| 香蕉视频成人在线| 欧美日韩在线观看一区二区| 九九视频在线观看| 国产欧美中文在线| 在线观看一区二区三区视频| 国产精品亚洲产品| 亚洲欧美国产不卡| 国产欧美一区二区三区米奇| 国产精品成人播放| 青青草视频在线免费直播| 亚洲人成电影在线观看天堂色| 国产jzjzjz丝袜老师水多| 福利二区91精品bt7086| 黄色一级大片在线免费观看| 97超碰欧美中文字幕| 污污视频网站在线| 老牛嫩草一区二区三区日本| 免费人成自慰网站| 日韩欧美国产精品综合嫩v| 国产日韩一区二区三区| 91精品亚洲一区在线观看| 91av国产在线| av激情在线| 中文在线不卡视频| 亚州视频一区二区三区| 精品美女在线播放| 岳乳丰满一区二区三区| 日韩欧美国产高清91| 青青操视频在线播放| 国产精品私房写真福利视频| 久久久无码人妻精品一区| 成人综合在线观看| 国产一区二区在线观看免费视频| 久热精品在线| 欧美一区二区三区爽大粗免费| 亚洲欧美一区在线| 在线观看欧美激情| 国产成人黄色| 久久另类ts人妖一区二区| 911精品国产| 亚洲淫片在线视频| 久久人人视频| 国产精品美女免费视频| 欧美电影免费观看网站| 2020国产精品视频| heyzo在线播放| 欧美国产第一页| 3d玉蒲团在线观看| 麻豆国产精品va在线观看不卡| 午夜在线播放| www.欧美精品| 黄色精品免费看| 国产精品色网| 国产精品18毛片一区二区| 国产区一区二| 91网在线免费观看| 成人在线视频www| 成人h猎奇视频网站| 欧美97人人模人人爽人人喊视频| 国产精品久久久久久久久男 | 日韩免费视频| 亚洲v国产v| 91麻豆国产自产在线观看亚洲| 深田咏美在线x99av| 日韩欧美1区| 黄色a级在线观看| 欧美福利视频| 亚洲人成无码网站久久99热国产| 欧美日韩精品| 九九热只有这里有精品| 亚洲精品韩国| 欧美日韩在线不卡视频| 日韩国产欧美在线播放| 天天干天天爽天天射| 久久99精品一区二区三区| 国产女同无遮挡互慰高潮91| 国产乱一区二区| 国产ts在线观看| 91亚洲精品乱码久久久久久蜜桃| 素人fc2av清纯18岁| 久久亚洲捆绑美女| 91禁男男在线观看| 亚洲免费视频中文字幕| 日本系列第一页| 第一福利永久视频精品| 天天操天天干天天摸| 欧美日本乱大交xxxxx| www.五月天激情| 亚洲精品美女在线| av影片免费在线观看| 欧美成人精品在线播放| xxx.xxx欧美| 日韩美女视频中文字幕| 中文字幕综合| 国产欧美一区二区在线播放| 蜜臀av免费一区二区三区| 亚洲国产午夜伦理片大全在线观看网站| 99久久视频| 极品美女扒开粉嫩小泬| 蜜桃在线一区二区三区| 韩国三级在线看| 国产无遮挡一区二区三区毛片日本| 91久久久久久久久久久久久久| 亚洲五月六月丁香激情| 天天天天天天天干| 日韩美女在线视频| 黄视频在线播放| 欧美老少配视频| 欧美电影免费观看| 官网99热精品| 区一区二视频| 日韩伦理在线免费观看| 久久精品国产精品亚洲综合| 精品国产91久久久久久久妲己| 中文字幕乱码人妻无码久久| 日韩欧美国产麻豆| 成av人电影在线观看| 欧美精品久久久久久久免费观看| 日韩制服一区| 精品乱子伦一区二区三区| 欧美r级电影| 免费午夜视频在线观看| 成人综合在线观看| 国产日产精品一区二区三区的介绍| 精品成人av一区| 99er热精品视频| 中文在线不卡视频| 欧美性suv| 国产一级精品aaaaa看| 这里只有精品在线| 亚洲第一中文av| 久久一留热品黄| 天海翼一区二区| 精品少妇一区二区三区免费观看| 欧美一区二区三区| 国产精品99久久久久久人| 欧美一级色片| 男人天堂av片| 国产久卡久卡久卡久卡视频精品| 亚洲激情图片网| 欧美性淫爽ww久久久久无| 日本啊v在线| 欧美性做爰毛片| 国产精品流白浆在线观看| 91精品国产吴梦梦| 久久99久久久欧美国产| 黄大色黄女片18免费| 91国偷自产一区二区使用方法| 亚洲 欧美 激情 另类| 97在线看福利| 91嫩草精品| 日本免费成人网| 国产1区2区3区精品美女| 久草视频手机在线观看| 日韩欧美黄色影院| 主播国产精品| 91av一区二区三区| 亚洲小说欧美另类社区| 亚洲av熟女高潮一区二区| 亚洲午夜av在线| 欧美一级特黄aaaaaa| 高清欧美性猛交xxxx黑人猛交| 97色成人综合网站| 国产精品专区在线| www.欧美色图| 亚洲永久精品在线观看| 国产婷婷成人久久av免费高清 | 精品久久精品| 黄色三级视频在线| 国产精品成人免费| 国产情侣自拍小视频| 欧美日韩国产999| 国产精品白浆| 人妻少妇被粗大爽9797pw| 久久久av毛片精品| 中文字幕在线观看视频一区| 俺去啦;欧美日韩| 影音先锋欧美激情| 国产极品在线视频| 欧美激情在线看| 亚洲一级av无码毛片精品| 精品久久91| 欧美第一页浮力影院| 亚洲精品日日夜夜| 欧美性受xxxx狂喷水| 国产91久久婷婷一区二区| 日产午夜精品一线二线三线| 日日干日日操日日射| 午夜精品久久久| 国产大学生校花援交在线播放| 91精品久久久久久久| 国内在线观看一区二区三区| 黄色正能量网站| 欧美剧在线免费观看网站| 麻豆蜜桃在线| 欧美综合激情| 国产精品一二三四五| 欧美亚洲精品天堂| 久久精品国产一区二区电影| 超碰在线亚洲| 天天色综合社区| 亚洲第一成人在线| se在线电影| 国产精品久久久久免费| 欧美aa在线视频| 日本一区二区欧美| 久久精品国产亚洲精品| 蜜桃tv一区二区三区| 国产精品久久久久久久99|