1. 程式人生 > 其它 >dev c++除錯_【工具系列】VSCode混合除錯 C/C++ 和 Node.js

dev c++除錯_【工具系列】VSCode混合除錯 C/C++ 和 Node.js

技術標籤:dev c++除錯vs code c++ 配置vs code react-native 安卓除錯vscode gdb不進斷點vscode nodejs外掛vscode node外掛

3ec4f9b57a5d2fbd7b766813f4c6073b.png

引言

慾善其事必先利其器也!

目前經常使用的IDE工具有如下幾種:

  • VSCode,各種平臺下的使用者體驗都是極好的,程式碼主題和顯示效果都是最佳的,而且輕量級的,資源消耗少;另外支援多種語言的開發,只需安裝相應的外掛,安裝、配置、學習的成本都是很低的。

  • CLion,Jetbrains公司推出的一款專為開發C/C++所設計的跨平臺IDE,不得不說Jetbrains出的產品就是讓人信賴,使用者體驗也是很不錯的,我喜歡使用clion除錯cmake工程,只需簡單的引入工程就可正常的開發除錯,還是很爽歪歪的。另外使用過一段時間Intellij IDEA開發過JAVA程式,真的開發效率大大提升,真的是Java程式設計師的神兵利器!大愛!不過因為是基於Java虛機JDK開發執行的,所以資源消耗較多,這點體驗不是很好。

  • Visual studio,經常使用VS在Windows下面除錯大型程式,對於一個含有很多工程的大型程式來說,VS毋庸置疑是最佳的開發和除錯工具,對於C++的初學者和開發者來說都是很不錯的選擇。就像一個小夥伴曾經說過的那樣,使用VS追蹤死鎖問題都是非常方便的。對於打算開始入手學習WebRTC的童鞋還是建議從Windows VS工程開始搞起。

對於經常多語言開發的童鞋,VSCode絕對是明智的選擇,我使用最多的還是C++、Node.js的混合開發除錯以及go語言的開發,而且VSCode對與docker的支援也是體驗很爽的。下面主要講一講Centos7下VSCode混合除錯C/C++和Node.js工程。


本文以node.js開發Hello world addon為例,例子來自:

https://nodejs.org/api/addons.html#addons_hello_world

Node.js基於GYP(Generate Your Projects)構建C/C++外掛的工具是node-gyp,它可以將C++外掛程式碼編譯成.node檔案,其實質是一個動態庫,可以自動生成make、cmake工程對應的Makefile和CMakeList.txt檔案。

單獨除錯C/C++程式碼,launch.json檔案如下:

{      "version": "0.2.0",      "configurations": [            {                  "type": "cppdbg",                  "request": "launch",                  "name": "Debug C/C++ Addon",                  "preLaunchTask": "npm: build:dev",                  "program": "node",                  "args": ["${workspaceFolder}/index.js"],                  "cwd": "${workspaceFolder}",                  "externalConsole": false            }    ]}
這樣就可以在Start Debugging的時候,會依據launch.json執行,當給C++程式碼標記斷點後,程式執行到斷點處就會停住。此時js程式碼不處於除錯狀態。 另外使用lldb外掛也可以起到相同的效果,不過需安裝lldb外掛:

af4505d1121b13b85a8a856db6850e46.png

此時只需將type改為lldb即可。lldb 是 llvm 的一個類似 gdb 的實現。這個外掛是用來支援 llvm 編譯器的。
混合除錯C/C++和Node.js先啟動Node.js工程開始除錯後,接著啟動C/C++偵錯程式,Attach到相應的程序上,這樣在深入js程式碼的同時,還可以除錯C++ Addons部分的程式碼,瞭解底層的呼叫邏輯。 launch.json檔案如下:
{        "version": "0.2.0",        "configurations": [        {            "name":"Launch",            "type":"node",            "request": "launch",            "preLaunchTask": "npm: build:dev",            "program": "${workspaceFolder}/index.js",            "args": [],            "console": "integratedTerminal"        },        {            "name": "Attach C/C++ Addon",            "type": "lldb",            "request": "attach",            "pid":"${command:pickMyProcess}"         }        ]}
配置中的第一項Launch是啟動node.js程式碼除錯,除錯 JS 程式碼,需要先將 Debugger 面板切換到 Launch。 配置中的第二項是Attach C/C++ Addon,把 Debug 面板的 Debugger 切換到 Attach C/C++ Addon, 接著再啟動即可。這裡的request: "attach", 是讓 lldb 連結到 nodejs 程序中去 Debug,下面的 pid 欄位就是啟動後,會彈出下拉框,然後選擇要連結的程序。一旦連結成功,就可以對 C/C++ 程式碼斷點了。
遇到的問題: 1.centos7下直接啟動code,UI介面一片白,選單和視窗都無法渲染 解決方法:code --disable-gpu 預設情況下code以啟動gpu的方式去渲染,虛擬機器下工作不正常,disable後正常工作。 2.安裝lldb外掛,不能以安裝數排名安裝Native Debug,直接安裝CodeLLDB即可。 3.使用cppdb attach工作不正常,而且需要processId和program,修改成lldb和pid的方式後工作正常。 4.安裝lldb外掛後報錯: 8851440d8f0bc7ab95be1651988c53a5.png 解決方法:
strings /lib64/libc.so.6 |grep GLIBC_wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxvf glibc-2.18.tar.gzcdglibc-2.18/&&mkdirbuild/&&cdbuild/../configure --prefix=/usrmake -j4sudo make install
5.更新glib後依然遇到如下問題: ec16f7f35d1b74355adb47532f003c90.png解決方法:
sudo yum install python3

歡迎大家拍磚留言,分享你感興趣的話題!

參考資料:

VSCode配置NodeJSC/C++ Addon Debug環境

http://www.vastiny.com/post/tech/vscode-nodejs-addon