1. 程式人生 > >基於遠端除錯閱讀Nomad原始碼_環境搭建

基於遠端除錯閱讀Nomad原始碼_環境搭建

Nomad原始碼閱讀的遠端除錯環境搭建

簡要記錄遠端除錯環境搭建,方便除錯,閱讀Nomad原始碼。

環境

Remote

VMWare 14
- 虛擬機器 Ubuntu 18.04

虛擬機器名local-dev2,IP地址192.168.237.200

Local

Windows 10 Pro,IP地址192.168.237.1

工具

VMWare 14

GoLand 2018.2.2 (自帶delve除錯工具)

Xshell,SSH金鑰連線虛擬機器local-dev2

前置條件

  1. 本地Windows安裝Go,並配置環境。

    如:本地環境配置為GOROOT=G:\Go

    GOPATH=G:\Go\gopath

  2. 拉取Nomad原始碼到GOPATH下相應目錄G:\Go\gopath\src\github.com\hashicorp\nomad。注意一定要是%GOPATH%\src目錄下,方便GoLand引用nomad\vendor下的依賴。

    原始碼路徑

  3. GoLand匯入nomad專案

    GoLand匯入原始碼

    確保匯入vendor依賴

    vendor

    可以執行某個單元測試,試試是否執行,編譯依賴是否解決。

  4. 安裝外掛Remote Hosts Access

    remote hosts access外掛

  5. 虛擬機器Ubuntu安裝Go,並配置環境

    例如,GOROOT=/snap/go/2635GOPATH=/root/go

  6. 虛擬機器Ubuntu中拉取程式碼到路徑/root/go/src/github.com/hashicorp/nomad/

    下。

  7. 虛擬機器Ubuntu中安裝delve,並配置到PATH中,即將/root/go/bin/配置到PATH中。

    安裝delve

    go get -u github.com/derekparker/delve/cmd/dlv
  8. 編譯用於delve除錯的可執行檔案

    go build -gcflags "all=-N -l" github.com/hashicorp/nomad

    此時,生成的可執行檔案nomad/tmp/root路徑下

遠端除錯

  1. 配置Go Remote遠端除錯

    go_remote配置

    並在原始碼中設定斷點,至少在一處關鍵程式碼中設定斷點,方便程式執行時停下。

  2. 虛擬機器Ubuntu中執行以下命令,啟動server及client

    /tmp/root/nomad agent -dev

    go agent dev

  3. 虛擬機器Ubuntu,再開一個標籤,設定delve監聽。

    找到啟動的nomad的PID程序號,此處為10134

    ps aux | grep nomad

    nomad pid

    配置dlv,在2345埠監聽與GoLand通訊遠端除錯

    dlv

  4. 此時,返回GoLand客戶端,檢視Debug視窗中,是否顯示正確通訊了。

    connected

  5. 虛擬機器Ubuntu,再開一個標籤,提交job。

    nomad init會生成example.nomad

    cd /root/tmp
    /root/tmp/nomad init
    /root/tmp/nomad run example.nomad

    exampel.nomad

    此時,如果順利,即處於監聽狀態,返回GoLand客戶端,在斷點處暫停。

  6. 返回GoLand客戶端,除錯閱讀程式碼。

    遠端除錯