Ubuntu下使用GDB斷點Go程序


  大家好,今天為大家帶來Ubuntu下,使用GDB斷點調試Go程序。由於之前沒有接觸過GDB調試,而Go語言本身內置也沒有什么調試工具,不像Eralng,有Debugger可以使用,我從網上搜索了下,也沒有相關的中文教程,所以這邊自己研究了下,給新手帶來一篇關於GDB簡單調試Go程序的文章。(關於GDB的文章還是不少的)

  首先,編寫測試代碼,如下:

package main

import (
    "fmt"
)

func main() {
    fmt.Printf("%s\n", "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 = %d\n", 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退出函數

  

  下面是我簡單調試的結果:

  

  這里最后還有個疑問,當我使用 p,輸出 count,和 sum 值的時候,它的值很奇怪,麻煩知道的朋友留言告知,謝謝。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM