亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 的 `set -x`:打印每個執行的行?

golang 的 `set -x`:打印每個執行的行?

Go
米琪卡哇伊 2023-01-03 11:23:50
是否有類似set -xgolang 的 shell 功能?我想查看執行的每一行代碼。不應打印標準庫的行。
查看完整描述

2 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

您可以使用 pprof組合:

  • 概要分析,它可以幫助您了解誰調用了什么,調用了多長時間

http://img1.sycdn.imooc.com//63b3a0150001e76d10590681.jpg

ofabry/go-callvis也可以幫助查看調用圖)

  • 它的 Weblist 視圖顯示了每條已執行的行及其成本:

http://img1.sycdn.imooc.com//63b3a021000135ce19510893.jpg

請參閱本指南中的“交互式分析” 。

這不會顯示按順序執行的每一行,但允許您在運行后探索執行的內容。


請注意,Go 1.20/1.21(2022 年第 4 季度/2023 年第 2 季度)將包括(因為接受了#55022):

Go 的配置文件引導優化 (PGO)

Go 程序中的低效率可以通過分析工具(例如pproflinux profiler )來隔離perf。此類工具可以查明花費大部分執行時間的源代碼區域。

與其他優化編譯器(如 LLVM)不同,Go 編譯器尚未執行Profile-Guided Optimization(PGO)
PGO 使用有關代碼運行時行為的信息來指導編譯器優化,例如內聯、代碼布局等。PGO 可以將應用程序性能提高 15-30% [LLVM、AutoFDO]。

在這個提案中,我們用 PGO 擴展了 Go 編譯器。

具體來說,我們將配置文件合并到編譯器的前端,以構建具有節點和邊權重(稱為WeightedCallGraph)的調用圖。Inliner 隨后使用WeightedCallGraph來執行配置文件引導的內聯,該內聯積極地內聯熱函數。

我們引入了一個配置文件引導的代碼專業化通道,它與 Inliner 緊密集成,并消除了熱代碼路徑中的間接方法調用開銷。

此外,我們使用相關的配置文件權重注釋 IR 指令,并將這些指令傳播到 SSA 級別,以促進配置文件引導的基本塊布局優化,從而從更好的指令緩存和 TLB 性能中獲益。

最后,我們擴展了 Go 的鏈接器以直接使用配置文件并跨包邊界執行函數重新排序優化——這也有助于指令緩存和 TLB 性能。

pprof我們的 PGO 使用的配置文件格式與該工具生成的 protobuf 格式相同。這種格式足夠豐富,可以攜帶額外的硬件性能計數器信息,例如緩存未命中、LBR 等。Google
現有perf_data_converter的工具可以將perf.dataLinuxperf生成的profile.proto文件轉換為 protobuf 格式的文件。

Go 中將針對 PGO 提出一個新的編譯流程

http://img1.sycdn.imooc.com//63b3a03100014bb713670521.jpg

查看完整回答
反對 回復 2023-01-03
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

由于 Go 是一種編譯語言,可執行文件不包含任何原始源代碼,因此無法輸出。您最接近您想要的方法是在調試模式下運行您的 Go 項目并單步執行每一行代碼。

這樣你就可以在運行時決定跳轉到一個函數或者只是執行它并跳過它,因為調試器不會知道你認為什么是“標準庫”,什么應該逐行跟蹤,什么不是。

另一方面,Go 可以是帶有 go 例程的大量多線程,因此打印每條執行的行可能會在一分鐘內變得一團糟(有時我有超過 100 個例程同時運行)。


查看完整回答
反對 回復 2023-01-03
  • 2 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號