設定 Visual Studio Code

Visual Studio Code (VSCode) 是一款免費程式碼編輯器,可在 macOS、Linux 和 Windows 作業系統上執行。它提供完善的工具支援,可支援 Python 和 C++ 開發、視覺化偵錯、與 Git 整合以及許多其他有趣的功能。由於易於使用和擴充功能管理,它是 TensorFlow IO 開發的絕佳編輯器。但是,需要付出一些努力才能正確設定它。由於 VSCode 設定非常彈性,開發人員可以使用 bazel 編譯專案,並在 Python 和 C++ 偵錯工具下執行程式碼。基本工具設定可能因作業系統而異,但設定方法應該類似。

擴充功能

若要安裝擴充功能,請按一下側邊欄上的擴充功能檢視圖示 (擴充功能),或使用快速鍵 Ctrl+Shift+X。然後搜尋以下關鍵字。

  • C/C++ - Microsoft 的官方 C++ 擴充功能
  • Python - Microsoft 的官方 Python 擴充功能
  • Python Extension Pack - 另一個適用於 Python 開發的實用擴充功能

編譯專案

TensorFlow IO 是使用 bazel build 命令編譯的

bazel build -s --verbose_failures --compilation_mode dbg //tensorflow_io/...

如需如何在 Ubuntu 中設定開發環境的詳細資訊,請參閱專案 README 檔案。--compilation_mode dbg 旗標表示產生的二進位檔應包含偵錯符號。一旦您可以從命令列編譯專案,您也可以設定 VSCode 以能夠叫用相同的命令。

開啟「檢視」->「命令面板」(Ctrl+Shift+P) 並開始輸入:「Tasks: Configure Build Task」。如果您是第一次執行此操作,編輯器會建議建立 tasks.json 檔案。建立檔案後,貼上以下 json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build TF.IO (Debug)",
            "type": "shell",
            "command": "bazel build -s --verbose_failures --compilation_mode dbg //tensorflow_io/...",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]
}

現在,您可以按下 Ctrl+Shift+B,VSCode 將使用上述命令來建置專案。它會使用自己的終端機視窗,其中的所有連結都可點擊。因此,當發生編譯錯誤時,您可以開啟對應的檔案,然後只需按一下終端機視窗中的連結即可導覽至該行。

偵錯專案

偵錯 Python 程式碼非常簡單,請依照官方文件瞭解如何設定 VSCode 以啟用偵錯:https://vscode.dev.org.tw/docs/python/debugging

但是,偵錯 C++ 程式碼需要您的系統上安裝 GDB。如果您有使用 tensorflow-io 程式庫的 bq_sample_read.py python 腳本,且通常以下列方式執行

python3 bq_sample_read.py --gcp_project_id=...

您可以使用以下命令在 GDB 下執行它

gdb -ex r --args python3 bq_sample_read.py --gcp_project_id=...

如果應用程式在 C++ 程式碼階段當機,您可以在 GDB 主控台中執行 backtrace 以取得錯誤的堆疊追蹤。

VSCode 也支援 GDB 偵錯工具。它允許新增中斷點、觀察變數值以及逐步執行程式碼。若要新增偵錯設定,請按一下側邊欄上的「偵錯檢視」圖示 (偵錯),或使用快速鍵 Ctrl+Shift+D。在這裡,按一下播放按鈕旁邊的小向下箭頭,然後選取「新增設定...」。現在它會建立一個 launch.json 檔案,請將以下設定新增至該檔案

{
    "name": "(gdb) Launch",
    "type": "cppdbg",
    "request": "launch",
    "program": "/usr/bin/python3",
    "args": ["bq_sample_read.py", "--gcp_project_id=..."],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [
        {
            /* path to your bazel-bin folder */
            "name": "TFIO_DATAPATH",
            "value": "/usr/local/google/home/io/bazel-bin"
        },
        {
            /* other env variables to use */
            "name": "GOOGLE_APPLICATION_CREDENTIALS",
            "value": "..."
        }
    ],
    "externalConsole": false,
    "MIMode": "gdb",
    "setupCommands": [
        {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        }
    ]
}

如果一切設定正確,您應該能夠執行「執行」->「開始偵錯」(F5) 或「執行」->「不偵錯執行」(Ctrl + F5)。這將在偵錯工具下執行您的程式碼

VSCode debugger

為了進一步簡化偵錯體驗,您可以設定 GDB 以略過標準 C++ 程式庫。這可讓您忽略您不關心的程式碼。若要執行此操作,請建立一個包含以下內容的 ~/.gdbinit 檔案

skip -gfi /usr/include/c++/*/*/*
skip -gfi /usr/include/c++/*/*
skip -gfi /usr/include/c++/*

格式化檔案

您可以隨時透過「按一下滑鼠右鍵」->「格式化文件」(Ctrl + Shift + I) 重新格式化 C++ 或 Python 檔案,但 VSCode 使用不同的樣式慣例。幸運的是,這很容易變更。

如需 Python 格式化,請參閱 https://donjayamanne.github.io/pythonVSCodeDocs/docs/formatting/

如需 C++ 格式化,請執行以下操作

  • 前往「偏好設定」->「設定」
  • 搜尋 "C_Cpp.clang_format_fallbackStyle"
  • 直接修改 file:setting.json 檔案,方法是新增以下內容
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google}"