1. 程式人生 > >2.5 visual studio調試nodeos

2.5 visual studio調試nodeos

選擇 前言 按鈕 進行 tar 文件中 ima 菜單項 rfi

2.5.1 前言

  Visual Studio在調試c++程序時,調式信息通是過界面的方式展示出來的,這很方便了我們的開發人員,那麽如果只有源代碼,而沒有把源代碼創建成解決方案,比如,linux環境下的C++工程,沒有Visual Studio的解決方案工程,那麽如何快速的調式這個項目呢?

  Visual Studio提供了打開一個代碼文件夾,配置一些詳細信息來運行和調試文件夾中的代碼。下面將詳細介紹如何通過打開文件夾的代碼開始調式程序。

2.5.2 原理介紹

  Visual Studio能夠通過打開文件夾的代碼開始調式程序,相當於Visual Studio和linux系統之間通過配置信息建立了某些映射關系,通過windows下和linux下的目錄使用同一份代碼進行調式,將linux系統下調式結果傳輸到Visual Studio中,展示出來。

打開文件夾進行調試通過 .json 文件來自定義配置信息:
tasks.vs.json 指定自定義生成命令和編譯器開關,以及任意(與非生成相關)任務。
通過“解決方案資源管理器”右鍵單擊菜單項“配置任務”進行訪問。
launch.vs.json 指定用於調試的命令行參數。
通過“解決方案資源管理器”右鍵單擊菜單項“調試和啟動設置”進行訪問。

這些.json文件位於代碼庫根文件夾中一個名為.vs的隱藏文件夾中。 當你在“解決方案資源管理器”中的文件或文件夾上選擇“配置任務”或“調試和啟動設置”時,Visual Studio 會根據需要創建 tasks.vs.json 和 launch.vs.json 文件。

tasks.vs.json

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskName": "任務-eos",
      "appliesTo": "/",
      "type": "launch"
    }
  ]
}

taskName : 指定右鍵單擊菜單中顯示的名稱
appliesTo : 指定可在其中執行命令的文件
type : 指用於調試的代碼庫的配置文件類型

launch.vs.json

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "cppdbg",
      "name": "E:\\work\\eos\\source\\stable code\\eos-v1.6.3\\eos",
      "project": "",
      "cwd": "/root/eos/eos/",
      "program": "/root/eos/eos/build/programs/nodeos/nodeos",
      "MIMode": "gdb",
      "externalConsole": true,
      "remoteMachineName": "192.168.3.231",
      "pipeTransport": {
        "pipeProgram": "${debugInfo.shellexecPath}",
        "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
        "debuggerPath": "/usr/bin/gdb"
      },
      "setupCommands": [
        {
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "visualizerFile": "${debugInfo.linuxNatvisPath}",
      "showDisplayString": true
    }
  ]
}

name : 指windows下的代碼目錄
cwd : 指linux下的代碼目錄
program : 指linux下的代碼編譯成功後的執行程序
MIMode : 指使用gdb方式調式
remoteMachineName : 遠程配置的主機名

2.5.3 環境準備

在調試之前我們需要以下環境並安裝一些軟件:
1.環境:win7及以上版本的操作系統,CentOS或ubuntu等任何一種linux操作系統;
2.安裝軟件:windows操作系統上安裝VS2015及以上版本;linux系統上安裝gcc、g++和gdbserver,ssh-server軟件;

註意:
在linux系統上安裝好ssh軟件後,需要啟動ssh-server服務,保證調式程序時,能將linux下的調試結果傳回到Visual Studio的界面中。

ssh-server服務的啟動命令:
CentOS系統 : systemctl start sshd
redhat系統 : service sshd start
ubuntu系統 : service ssh start

2.5.4 vs打開文件夾調試程序

我們以vs2017調試eos代碼為例:

1.通過文件夾打開代碼,vs界面中選擇:文件->打開->文件夾,然後彈出下面的對話框,選擇代碼的路徑;本機windows下的代碼在E:\work\eos\source\stable code\eos-v1.6.3\eos中。
技術分享圖片

打開文件夾後,代碼工程如下:
技術分享圖片

2.配置遠程環境,這是我們程序運行的linux環境,需要在配置ssh遠程訪問,用於將調試結果傳回vs界面。
vs界面中選擇:工具->選項->跨平臺->連接管理器,界面如下圖所示:
技術分享圖片

添加ssh遠程訪問連接配置:點擊添加按鈕,界面如下:
技術分享圖片

3.生成配置任務 tasks.vs.json 文件,右鍵解決方案(eos),彈出如下窗口,選擇"配置任務",如下圖:
技術分享圖片

tasks.vs.json 文件生成後,不需要修改其中的內容。
技術分享圖片

4.設置“調試”和“啟動”的launch.vs.json配置文件,右鍵解決方案(eos),彈出如下窗口,選擇“調試”和“啟動”設置,會彈出選擇gdb的方式:
技術分享圖片

需要選擇遠程機器的調試方式,我們選擇C/C++ Launch for Linux(gdb) :
技術分享圖片

點擊選擇按鈕後,會彈出launch.vs.json文件,需要修改此文件:
原launch.vs.json文件:
技術分享圖片

修改後的launch.vs.json文件如下:
技術分享圖片

5.json配置文件生成和修改完成後,需要先在linux目錄下,把程序編譯成功,生成可執行文件,生成的可執行程序路徑必須和launch.vs.json文件中program的配置路徑程序一致。
然後就可以開始調式程序了,右鍵解決方案(eos),彈出如下窗口,選擇“調試“,程序就開始啟動調試了:
技術分享圖片

至此,我們的程序就調試運行起來了,如下圖:
技術分享圖片

2.5.5 總結

程序不能正常啟動調試的原因:
1.windows目錄下的代碼和linux目錄下的代碼不是同一份,導致啟動調試異常。
2.linux下的程序需要編譯成debug版本,否則不能正常啟動調試。
3.launch.vs.json文件中remoteMachineName遠程主機配置的不對或者ssh服務沒有啟動,導致不能正常啟動調試。
4.launch.vs.json文件中program執行程序的路徑和執行程序的名稱配置不對,導致不能正常啟動調試。

2.5 visual studio調試nodeos