VS Code 调试 OneFlow
VS Code 調試 OneFlow
本文介紹如何配置 VS Code,搭建 OneFlow 的 GUI 開發環境。
如果對于 VS Code 及其插件系統還不熟悉,可以參閱官方文檔。
本文包括:
? 如何編譯 Debug 版本的 OneFlow
? 遠程調試所必需的 VS Code 插件的安裝配置
編譯 Debug 版本的 OneFlow
如果使用 Release 版本的 OneFlow,可能會因為編譯器優化,導致在調試過程中程序實際運行位置與源碼行不對應。
需要編譯 Debug 版本的 OneFlow,并且需要生成 clangd 所需要的 json 文件。
在運行 cmake 的時候需要加上 Debug 及 CMAKE_EXPORT_COMPILE_COMMANDS 的 flag。
cmake …
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_EXPORT_COMPILE_COMMANDS=1
? -DCMAKE_BUILD_TYPE=Debug 選項指定編譯 Debug 版本
? -DCMAKE_EXPORT_COMPILE_COMMANDS 選項會在 build 目錄下生成后文 clangd 配置時所需要的 compile_commands.json 文件
Remote - SSH
本節內容僅為那些需要遠程開發的人員準備,在本地主機上進行開發的人員 可以略過此節。
通過 VS Code 的 Remote SSH 插件,可以通過 SSH 的方式連接遠程服務器。
被調試對象 OneFlow 可以運行在遠程主機上,然后通過 Remote SSH 將遠程的情況和本地的 VS Code 用戶操作連接起來, 像調試本地程序一樣調試遠程主機上的程序。
安裝完成 Remote - SSH 后,按 F1,在彈出的搜索欄中選擇 Remote-SSH: Connect to Host…,即可設置 SSH 的連接信息,連接遠程主機。
Remote - SSH 連接遠程主機后,在插件一欄,會自動分類“遠程”與“本地”,如果檢測到需要在遠程電腦上安裝的插件,會顯示為灰色,并帶有 Install in SSH:遠程主機名 的按鈕,點擊即可將對應插件安裝在遠程主機。
如上圖,已經在遠程主機安裝 Python、clangd、Native Debug 插件,用于支持遠程調試 OneFlow。
但是遠程主機并沒(本地主機已經安裝的)Go 和 HTML CSS Support 插件。
clangd
經過簡單的配置,clangd可以為提供代碼補全、符號跳轉等便利。
在配置 clangd 之前,需要確認:
? 已經通過編譯,生成了compile_commands.json文件
? 已經通過 Remote - SSH 在遠程主機上安裝了 clangd 插件
? 不要 安裝 VS Code 默認推薦的 ms-vscode.cpptools C/C++ 插件,因為 clangd 與之有沖突
安裝 clangd 程序
VS Code 上的插件,通過與 clangd 服務程序交互,獲取解析信息并顯示的。因此除了安裝 VS Code 上的 clangd 插件外,還需要在 OneFlow 源碼所在的主機上 (本文中為遠程 Linux 主機)安裝 clangd 服務程序。
將采用下載 zip 文件并解壓的方式安裝 clangd,更多安裝方法,可以參考 clangd 官方文檔。
首先,下載與系統平臺對應的clangd壓縮包,并解壓。 解壓后可先運行 clangd 測試下,確保能正常運行后再進行后續配置。
/path/to/clangd/bin/clangd --help
配置 VS Code 中的 clangd 插件
將 build 目錄下的 compile_commands.json 文件軟鏈接到 OneFlow 的源碼根目錄下,在 OneFlow 的源碼根目錄下:
ln -s ./build/compile_commands.json compile_commands.json
然后 Ctrl+Shift+P (macOS 下 command+shift+p),找到 Open Remote Settings 選項,打開 settings.json 配置文件,在其中加入以下配置:
“clangd.path”: “/path/to/bin/clangd”,
“clangd.arguments”: [
“-j”,
“12”,
“-clang-tidy”
]
clangd.arguments的意義及更多參數選項,可查閱clangd --help。
使用 clangd
在 VS Code 的 View->Output 面板,下拉菜單中選擇 “Clang Language Server”,可以看到 clangd 的解析輸出,解析完成后。選擇 C/C++ 源碼中的符號,可以實現跳轉。
按Ctrl+P (macOS 下 command+P) 后通過@符號名或#符號名可以分別實現當前文件內查找符號,或工程范圍內查找符號。
native debug
Ctrl + Shift + D (macOS 下 command+shift+D) 或者點擊 activity bar 的 Run 按鈕,進入到 Run 視圖。
選擇 Create a launch.json file,選擇 gdb 模板。
然后設置相關參數:
{
“version”: “0.2.0”,
“configurations”: [
{
“name”: “lenet”, //自定義任務名
“type”: “gdb”,
“request”: “launch”,
“target”: “/home/yaochi/.conda/envs/ycof/bin/python3”, //python路徑
“arguments”: “lenet_train.py”, //腳本
“cwd”: “/home/yaochi/of_example”, //腳本所在路徑
“valuesFormatting”: “parseText”
}
]
}
設置斷點后,F5 啟動調試:
其它
? 如果 VS Code 下載插件速度過慢,可以按照官方文檔的步驟切換 hostname 或者設置代理。
? 關于 clangd 安裝配置的官方介紹
? 關于 VS Code 的調試設置的官方介紹
? clangd 的最新版本可能對 glibc 版本要求過高,導致報缺少庫的錯誤。
./bin/clangd: /lib64/libc.so.6: version `GLIBC_2.18’ not found (required by ./bin/clangd)
此時可以下載其它更低 clangd 的版本(本文推薦版本為 9.0.0),早期版本的 clangd 需要到 LLVM官網 下載整個LLVM工具鏈,其中包含有 clangd。
總結
以上是生活随笔為你收集整理的VS Code 调试 OneFlow的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运行时数据获取
- 下一篇: Python 扩展 Op