<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在前邊幾篇文章中分享了Go編譯過程中的原始碼實現,本文主要是想分享一下我是怎麼偵錯Go的原始碼的(如果你很熟悉的話,可以跳過本文)。本文主要是分享兩種Go原始碼的偵錯方法
本文我還會以抽象語法樹為例,來通過dlv對它的構建過程進行偵錯
下邊以偵錯Go編譯的入口檔案為例
編輯debug設定
填寫設定資訊
打斷點,並開始執行
偵錯
這些偵錯按鈕的功能其實跟其他的IDEA是一樣的,之前整理過,這裡不重複整理了,不清楚的小夥伴可以看這裡
這裡以mac為例
brew install dlv
啟動
$ dlv debug 待偵錯檔案
可以通過下邊的方式檢視一些常用的命令
$ gc dlv debug /usr/local/go/src/cmd/compile/main.go Type 'help' for list of commands. (dlv) help The following commands are available: Running the program: call ------------------------ (EXPERIMENTAL!!!)恢復程序,注入函數呼叫(實驗的) continue (alias: c) --------- 執行到斷點或程式終止 next (alias: n) ------------- 執行下一行. rebuild --------------------- 重新生成目標可執行檔案並重新啟動它. 如果可執行檔案不是由dlv構建,它就不能工作. restart (alias: r) ---------- 重新啟動一個程序. step (alias: s) ------------- 單步偵錯. step-instruction (alias: si) Single step a single cpu instruction. stepout (alias: so) --------- Step out of the current function. Manipulating breakpoints: break (alias: b) ------- 設定一個端點. breakpoints (alias: bp) 列印所有的端點資訊. clear ------------------ 清除端點. clearall --------------- 刪除多個端點. condition (alias: cond) 設定斷點條件. on --------------------- 在命中斷點時執行命令. toggle ----------------- 開啟或關閉斷點. trace (alias: t) ------- Set tracepoint. watch ------------------ Set watchpoint. Viewing program variables and memory: args ----------------- 列印函數引數. display -------------- 每次程式停止時列印表示式的值. examinemem (alias: x) 檢查給定地址的原始記憶體. locals --------------- 列印區域性變數. print (alias: p) ----- 列印變數值. regs ----------------- 列印CPU暫存器的內容. set ------------------ 更改變數的值. vars ----------------- 列印包變數. whatis --------------- 列印表示式的型別. Listing and switching between threads and goroutines: goroutine (alias: gr) -- 顯示或更改當前goroutine goroutines (alias: grs) 列出程式goroutines. thread (alias: tr) ----- 切換到指定的執行緒. threads ---------------- 列印每個跟蹤執行緒的資訊. Viewing the call stack and selecting frames: deferred --------- 在延遲呼叫的上下文中執行命令. down ------------- 向下移動當前幀. frame ------------ 設定當前幀,或在其他幀上執行命令. stack (alias: bt) 列印堆疊資訊. up --------------- 向上移動當前幀 Other commands: config --------------------- 更改設定引數. disassemble (alias: disass) Disassembler. dump ----------------------- 從當前程序狀態建立核心轉儲 edit (alias: ed) ----------- Open where you are in $DELVE_EDITOR or $EDITOR exit (alias: quit | q) ----- 退出偵錯. funcs ---------------------- 列印函數列表. help (alias: h) ------------ 列印幫助資訊. libraries ------------------ 列出載入的動態庫 list (alias: ls | l) ------- 展示原始碼. source --------------------- 執行包含delve命令列表的檔案 sources -------------------- 列印原始檔列表 types ---------------------- 列印型別列表 Type help followed by a command for full documentation. (dlv)
下邊利用dlv來偵錯Go編譯過程中的抽象語法樹構建。我這裡沒有粘程式碼,你可以開啟原始碼對著下邊看
你也可以列印xtop下邊元素的值,比如檢視xtop第一個元素的左節點
以上就是Go語言編譯原理之原始碼偵錯的詳細內容,更多關於Go編譯原理原始碼偵錯的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45