這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
大家好,今天為大家帶來Ubuntu下,使用GDB斷點調試Go程式。由於之前沒有接觸過GDB調試,而Go語言本身內建也沒有什麼調試工具,不像 Eralng,有Debugger可以使用,我從網上搜尋了下,也沒有相關的中文教程,所以這邊自己研究了下,給新手帶來一篇關於GDB簡單調試Go程式 的文章。(關於GDB的文章還是不少的)
首先,編寫測試代碼,如下:
package main
import (
"fmt"
)
func main() {
fmt.Printf("%sn", "hello, world")
printNumber()
}
func printNumber() {
var count int;
count = 10
sum := 0
for i := 0; i < count; i++ {
sum = sum + i
fmt.Printf("i = %d, sum = %dn", i, sum)
}
}
編譯,並運行程式(Ubuntu下的Sublime Text 2,如果你也想用這個工具,可以參看我令一篇文章:Ubuntu下使用Sublime Text 2搭建Go開發環境):
go build main.go
./main
好了,現在我們就可以開始使用GDB調試,產生的main應用程式了,這裡為了快速找到應用程式,我把該程式和代碼放置到 ~/ 目錄下。
一,使用GDB載入應用程式,開啟終端,輸入 gdb main,如:
這裡注意最後兩行:
Reading symbols from /home/administrator/main…done.
Loading Go Runtime support.
讀取main程式完成和載入Go運行時。
二,輸入 l 命令,相當於list,從第一行開始列出源碼,如:
認真的朋友,會發現main.go代碼,並沒有完整的顯示在這裡,怎麼回事呢?
這裡我們直接再敲個斷行符號,就會產生如的結果:
還是不完整,再來個斷行符號呢?
現在已經完整了,如果再來個斷行符號呢?
這個時候,根據提示,我們就知道代碼已經全部顯示出來了。
三,設定斷點,並顯示斷點資訊:
輸入 break 8,表示在第8行,設定一個斷點。
輸入 break printNumber,表示在函數 printNumber 函數入口處,設定一個斷點,這裡沒有設定成功,需要輸入 break main.printNumber。感謝朋友JamCode和mikespook的協助。
輸入 break 14,表示在第14行,設定一個斷點。
輸入 info break,表示查看斷點資訊。
四,運行程式,並調試。
輸入 r,運行程式,run命令簡寫,程式將停止第8行斷點處,如:
使用 n,單條語句執行,next命令簡寫。
使用 c,繼續運行程式(跳過當前斷點),continue命令簡寫。
使用bt,查看函數堆棧。
使用finish,退出函數。
下面是我簡單調試的結果: