最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言編譯原理之源碼調(diào)試

 更新時間:2022年08月04日 15:48:59   作者:書旅  
這篇文章主要為大家介紹了Go語言編譯原理之源碼調(diào)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

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

  • Goland的debug
  • dlv工具

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

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

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

編輯debug配置

填寫配置信息

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

調(diào)試

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

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

安裝

這里以mac為例

brew install dlv

啟動

$ dlv debug 待調(diào)試文件

常用命令

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

$ 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!!!)恢復(fù)進(jìn)程,注入函數(shù)調(diào)用(實(shí)驗(yàn)的)
    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)  Single step a single cpu instruction.
    stepout (alias: so) --------- Step out of the current function.
Manipulating breakpoints:
    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) ------- Set tracepoint.
    watch ------------------ Set watchpoint.
Viewing program variables and memory:
    args ----------------- 打印函數(shù)參數(shù).
    display -------------- 每次程序停止時打印表達(dá)式的值.
    examinemem (alias: x)  檢查給定地址的原始內(nèi)存.
    locals --------------- 打印局部變量.
    print (alias: p) ----- 打印變量值.
    regs ----------------- 打印CPU寄存器的內(nèi)容.
    set ------------------ 更改變量的值.
    vars ----------------- 打印包變量.
    whatis --------------- 打印表達(dá)式的類型.
Listing and switching between threads and goroutines:
    goroutine (alias: gr) -- 顯示或更改當(dāng)前goroutine
    goroutines (alias: grs)  列出程序goroutines.
    thread (alias: tr) ----- 切換到指定的線程.
    threads ---------------- 打印每個跟蹤線程的信息.
Viewing the call stack and selecting frames:
    deferred --------- 在延遲調(diào)用的上下文中執(zhí)行命令.
    down ------------- 向下移動當(dāng)前幀.
    frame ------------ 設(shè)置當(dāng)前幀,或在其他幀上執(zhí)行命令.
    stack (alias: bt)  打印堆棧信息.
    up --------------- 向上移動當(dāng)前幀
Other commands:
    config --------------------- 更改配置參數(shù).
    disassemble (alias: disass)  Disassembler.
    dump ----------------------- 從當(dāng)前進(jìn)程狀態(tài)創(chuàng)建核心轉(zhuǎn)儲
    edit (alias: ed) ----------- Open where you are in $DELVE_EDITOR or $EDITOR
    exit (alias: quit | q) ----- 退出調(diào)試.
    funcs ---------------------- 打印函數(shù)列表.
    help (alias: h) ------------ 打印幫助信息.
    libraries ------------------ 列出加載的動態(tài)庫
    list (alias: ls | l) ------- 展示源代碼.
    source --------------------- 執(zhí)行包含delve命令列表的文件
    sources -------------------- 打印源文件列表
    types ---------------------- 打印類型列表
Type help followed by a command for full documentation.
(dlv)

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

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

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

  • 設(shè)置斷點(diǎn)、continue的使用、n的使用(r 設(shè)置編譯器編譯目標(biāo)文件)

  • 在指定文件的指定位置設(shè)置斷點(diǎn)

  • 打印抽象語法樹構(gòu)建出來的結(jié)果(xtop)

你也可以打印xtop下邊元素的值,比如查看xtop第一個元素的左節(jié)點(diǎn)

以上就是Go語言編譯原理之源碼調(diào)試的詳細(xì)內(nèi)容,更多關(guān)于Go編譯原理源碼調(diào)試的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang中g(shù)RPC內(nèi)置Trace的實(shí)現(xiàn)

    Golang中g(shù)RPC內(nèi)置Trace的實(shí)現(xiàn)

    gRPC內(nèi)置了基于golang.org/x/net/trace包的客戶端和服務(wù)端請求追蹤,默認(rèn)開啟狀態(tài),可以查看事件和請求日志,幫助調(diào)試,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Go語言{}大括號的特殊用法實(shí)例探究

    Go語言{}大括號的特殊用法實(shí)例探究

    這篇文章主要為大家介紹了Go語言{}大括號的特殊用法實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語言如何實(shí)現(xiàn)限制用戶請求

    Go語言如何實(shí)現(xiàn)限制用戶請求

    這篇文章主要為大家詳細(xì)介紹了Go語言如何實(shí)現(xiàn)限制用戶 1 分鐘內(nèi)最多請求 1000 次,文中為大家整理了三個常用的方法,希望對大家有所幫助
    2025-01-01
  • golang高并發(fā)限流操作 ping / telnet

    golang高并發(fā)限流操作 ping / telnet

    這篇文章主要介紹了golang高并發(fā)限流操作 ping / telnet,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • go語言實(shí)現(xiàn)抓取高清圖片

    go語言實(shí)現(xiàn)抓取高清圖片

    本文給大家分享的是使用go語言實(shí)現(xiàn)的抓取高清美女圖片的代碼,原理非常簡單,這里就不多廢話了,主要是看到很多小伙伴使用python實(shí)現(xiàn)的,心血來潮就用go寫了下,推薦給大家。
    2015-03-03
  • Go語言實(shí)現(xiàn)圖片快遞信息識別的簡易方法

    Go語言實(shí)現(xiàn)圖片快遞信息識別的簡易方法

    這篇文章主要為大家介紹了Go語言實(shí)現(xiàn)圖片快遞信息識別的簡易方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • go嵌套匿名結(jié)構(gòu)體的初始化詳解

    go嵌套匿名結(jié)構(gòu)體的初始化詳解

    這篇文章主要介紹了go嵌套匿名結(jié)構(gòu)體的初始化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang中函數(shù)的使用方法詳解

    Golang中函數(shù)的使用方法詳解

    這篇文章主要詳細(xì)介紹了Golang中函數(shù)的使用方法,文中有詳細(xì)的示例代碼,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • goland 實(shí)現(xiàn)自動格式化代碼

    goland 實(shí)現(xiàn)自動格式化代碼

    這篇文章主要介紹了goland 實(shí)現(xiàn)自動格式化代碼的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • go語言int64整型轉(zhuǎn)字符串的實(shí)現(xiàn)

    go語言int64整型轉(zhuǎn)字符串的實(shí)現(xiàn)

    本文主要介紹了go語言int64整型轉(zhuǎn)字符串的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論

融水| 大化| 保靖县| 信丰县| 白银市| 隆林| 大埔区| 连城县| 开远市| 隆德县| 家居| 元氏县| 墨脱县| 西林县| 南乐县| 上杭县| 乌鲁木齐市| 永靖县| 庄浪县| 德庆县| 巴林右旗| 鹤庆县| 上杭县| 香港 | 乾安县| 莫力| 弥勒县| 桦川县| 日喀则市| 乐平市| 岐山县| 卢龙县| 内乡县| 呼图壁县| 灵璧县| 会宁县| 光山县| 华坪县| 苗栗市| 外汇| 江西省|