Go語言編譯原理之源碼調(diào)試_第1頁
Go語言編譯原理之源碼調(diào)試_第2頁
Go語言編譯原理之源碼調(diào)試_第3頁
Go語言編譯原理之源碼調(diào)試_第4頁
Go語言編譯原理之源碼調(diào)試_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第Go語言編譯原理之源碼調(diào)試目錄前言Goland的debug調(diào)試Go源碼dlv工具調(diào)試Go源碼安裝常用命令dlv調(diào)試抽象語法樹構(gòu)建

前言

在前邊幾篇文章中分享了Go編譯過程中的源碼實現(xiàn),本文主要是想分享一下我是怎么調(diào)試Go的源代碼的(如果你很熟悉的話,可以跳過本文)。本文主要是分享兩種Go源碼的調(diào)試方法

Goland的debugdlv工具

本文我還會以抽象語法樹為例,來通過dlv對它的構(gòu)建過程進(jìn)行調(diào)試

Goland的debug調(diào)試Go源碼

下邊以調(diào)試Go編譯的入口文件為例

編輯debug配置

填寫配置信息

打斷點(diǎn),并開始執(zhí)行

調(diào)試

這些調(diào)試按鈕的功能其實跟其他的IDEA是一樣的,之前整理過,這里不重復(fù)整理了,不清楚的小伙伴可以看這里

dlv工具調(diào)試Go源碼

安裝

這里以mac為例

brewinstalldlv

啟動

$dlvdebug待調(diào)試文件

常用命令

可以通過下邊的方式查看一些常用的命令

$gcdlvdebug/usr/local/go/src/cmd/compile/main.go

Type'help'forlistofcommands.

(dlv)help

Thefollowingcommandsareavailable:

Runningtheprogram:

call------------------------(EXPERIMENTAL!!!)恢復(fù)進(jìn)程,注入函數(shù)調(diào)用(實驗的)

continue(alias:c)---------運(yùn)行到斷點(diǎn)或程序終止

next(alias:n)-------------執(zhí)行下一行.

rebuild---------------------重新生成目標(biāo)可執(zhí)行文件并重新啟動它.如果可執(zhí)行文件不是由dlv構(gòu)建,它就不能工作.

restart(alias:r)----------重新啟動一個進(jìn)程.

step(alias:s)-------------單步調(diào)試.

step-instruction(alias:si)Singlestepasinglecpuinstruction.

stepout(alias:so)---------Stepoutofthecurrentfunction.

Manipulatingbreakpoints:

break(alias:b)-------設(shè)置一個端點(diǎn).

breakpoints(alias:bp)打印所有的端點(diǎn)信息.

clear------------------清除端點(diǎn).

clearall---------------刪除多個端點(diǎn).

condition(alias:cond)設(shè)置斷點(diǎn)條件.

on---------------------在命中斷點(diǎn)時執(zhí)行命令.

toggle-----------------打開或關(guān)閉斷點(diǎn).

trace(alias:t)-------Settracepoint.

watch------------------Setwatchpoint.

Viewingprogramvariablesandmemory:

args-----------------打印函數(shù)參數(shù).

display--------------每次程序停止時打印表達(dá)式的值.

examinemem(alias:x)檢查給定地址的原始內(nèi)存.

locals---------------打印局部變量.

print(alias:p)-----打印變量值.

regs-----------------打印CPU寄存器的內(nèi)容.

set------------------更改變量的值.

vars-----------------打印包變量.

whatis---------------打印表達(dá)式的類型.

Listingandswitchingbetweenthreadsandgoroutines:

goroutine(alias:gr)--顯示或更改當(dāng)前goroutine

goroutines(alias:grs)列出程序goroutines.

thread(alias:tr)-----切換到指定的線程.

threads----------------打印每個跟蹤線程的信息.

Viewingthecallstackandselectingframes:

deferred---------在延遲調(diào)用的上下文中執(zhí)行命令.

down-------------向下移動當(dāng)前幀.

frame------------設(shè)置當(dāng)前幀,或在其他幀上執(zhí)行命令.

stack(alias:bt)打印堆棧信息.

up---------------向上移動當(dāng)前幀

Othercommands:

config---------------------更改配置參數(shù).

disassemble(alias:disass)Disassembler.

dump-----------------------從當(dāng)前進(jìn)程狀態(tài)創(chuàng)建核心轉(zhuǎn)儲

edit(alias:ed)-----------Openwhereyouarein$DELVE_EDITORor$EDITOR

exit(alias:quit|q)-----退出調(diào)試.

funcs----------------------打印函數(shù)列表.

help(alias:h)------------打印幫助信息.

libraries------------------列出加載的動態(tài)庫

list(alias:ls|l)-------展示源代碼.

source---------------------執(zhí)行包含delve命令列表的文件

sources--------------------打印源文件列表

types----------------------打印類型列表

Typehelpfollowedbyacommandforfulldocumentation.

(dlv)

dlv調(diào)試抽象語法樹構(gòu)建

下邊利用dlv來調(diào)試Go編譯過程中的抽象語法樹構(gòu)建。我這里沒有粘代碼,你可以打開源代碼對著下邊看

啟動dlv,并調(diào)試Go編譯的入口文件

設(shè)置斷點(diǎn)、continue的使用、n的使用(r設(shè)置編譯器編譯目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論