go語言的高級調試方法 go語言goto

調試Go語言的核心轉儲(Core Dumps)

英文原文鏈接【Go, the unwritten parts】 發(fā)表于2017/05/22 作者JBD是Go語言開發(fā)小組成員

員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團隊的力量開發(fā)出優(yōu)質的產(chǎn)品。成都創(chuàng)新互聯(lián)堅持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因為“專注所以專業(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供網(wǎng)站制作、成都做網(wǎng)站、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),重慶小程序開發(fā)公司,軟件按需網(wǎng)站開發(fā)等一站式互聯(lián)網(wǎng)企業(yè)服務。

檢查程序的執(zhí)行路徑和當前狀態(tài)是非常有用的調試手段。核心文件(core file)包含了一個運行進程的內存轉儲和狀態(tài)。它主要是用來作為事后調試程序用的。它也可以被用來查看一個運行中的程序的狀態(tài)。這兩個使用場景使調試文件轉儲成為一個非常好的診斷手段。我們可以用這個方法來做事后診斷和分析線上的服務(production services)。

在這篇文章中,我們將用一個簡單的hello world網(wǎng)站服務作為例子。在現(xiàn)實中,我們的程序很容易就會變得很復雜。分析核心轉儲給我們提供了一個機會去重構程序的狀態(tài)并且查看只有在某些條件/環(huán)境下才能重現(xiàn)的案例。

作者注 : 這個調試流程只在Linux上可行。我不是很確定它是否在其它Unixs系統(tǒng)上工作。macOS對此還不支持。Windows現(xiàn)在也不支持。

在我們開始前,需要確保核心轉儲的ulimit設置在合適的范圍。它的缺省值是0,意味著最大的核心文件大小是0。我通常在我的開發(fā)機器上將它設置成unlimited。使用以下命令:

接下來,你需要在你的機器上安裝 delve 。

下面我們使用的 main.go 文件。它注冊了一個簡單的請求處理函數(shù)(handler)然后啟動了HTTP服務。

讓我們編譯并生產(chǎn)二進制文件。

現(xiàn)在讓我們假設,這個服務器出了些問題,但是我們并不是很確定問題的根源。你可能已經(jīng)在程序里加了很多輔助信息,但還是無法從這些調試信息中找出線索。通常在這種情況下,當前進程的快照會非常有用。我們可以用這個快照深入查看程序的當前狀態(tài)。

有幾個方式來獲取核心文件。你可能已經(jīng)熟悉了奔潰轉儲(crash dumps)。它們是在一個程序奔潰的時候寫入磁盤的核心轉儲。Go語言在缺省設置下不會生產(chǎn)奔潰轉儲。但是當你把 GOTRACEBACK 環(huán)境變量設置成“crash”,你就可以用 Ctrl+backslash 才觸發(fā)奔潰轉儲。如下圖所示:

上面的操作會使程序終止,將堆棧跟蹤(stack trace)打印出來,并把核心轉儲文件寫入磁盤。

另外個方法可以從一個運行的程序獲得核心轉儲而不需要終止相應的進程。 gcore 可以生產(chǎn)核心文件而無需使運行中的程序退出。

根據(jù)上面的操作,我們獲得了轉儲而沒有終止對應的進程。下一步就是把核心文件加載進delve并開始分析。

差不多就這些。delve的常用操作都可以使用。你可以backtrace,list,查看變量等等。有些功能不可用因為我們使用的核心轉儲是一個快照而不是正在運行的進程。但是程序執(zhí)行路徑和狀態(tài)全部可以訪問。

go語言調試器有哪些官網(wǎng)

可以去DELVE官網(wǎng)進行下載。

關于delve工具的介紹,這里簡單給大家介紹一下。

delve在go項目及應用的開發(fā)中可以用來追蹤程序中的異常代碼,也可以通過打日志的方式追查問題,但是更重要也是非常厲害的一點,就是delve可以直接分析程序執(zhí)行的情況。這一點在后期或線上的問題排查中無疑是提供了一個非常大的便捷。

Go(又稱?Golang)是?Google?的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強類型、編譯型語言。

Go 語言語法與?C?相近,但功能上有:內存安全,GC(垃圾回收),結構形態(tài)及 CSP-style?并發(fā)計算。

Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進程(CSP)為基礎。

采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運算的特征,比如通道傳輸。在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動態(tài)加載部分函數(shù)。

Delve常用命令

命令功能:

dlv attach后面跟 pid,用來Debug編譯好的Golang程序。

dlv core用于 coredump。

dlv debug后面跟要調試的 go 文件,進入 Debug。

dlv testDebug test 函數(shù)。

Go語言編譯成aar并調試

go及gomobile的環(huán)境配置這里就不介紹了,直接說aar的生成和使用。

1. 設置環(huán)境變量GOPATH

GOPATH的值可以有多個,用半角分號間隔,但不能以其結束,設置完成后需要重新做 gomobile init 。

2. 在GOPATH里創(chuàng)建src文件夾,用于存放go的包和源文件

3. 在src中創(chuàng)建hello文件夾(go文件的包名)

4. 在hello中創(chuàng)建hello.go文件,并輸入內容

5. 編譯

執(zhí)行命令: gomobile bind -target=android hello

會生成一個hello.aar文件

6. 導入到android工程

將hello.aar文件放入工程的libs中,并配置build.gradle

在根結點加入:

在dependencies結點下加入依賴:

7. 在Java中測試

運行后,結果會輸出 Hello, Android and Gopher

新聞標題:go語言的高級調試方法 go語言goto
本文網(wǎng)址:http://bm7419.com/article12/ddccigc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、App開發(fā)靜態(tài)網(wǎng)站、網(wǎng)站排名、建站公司、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化