之前在Docker已經配置成功單步混合調試,但是再次配置本機的OWT Server 單步調試環(huán)境,折騰了一些時間,寫此文記錄要點。
1,使用VSCode 打開 OWT Server 目錄源碼
2,安裝必要的插件
C/C++
Nodejs Snippets
JavaScript (ES6) code snippets

3,? 創(chuàng)建?.vscode/launch.json?文件,內容如下:
"version": "0.2.0",
? ? "configurations": [
? ? ? ? {
? ? ? ? ? ? "name": "(gdb) Attach",
? ? ? ? ? ? "type": "cppdbg",
? ? ? ? ? ? "request": "attach",
? ? ? ? ? ? "program": "/home/oem/.nvm/versions/node/v14.19.1/bin/node",
? ? ? ? ? ? "processId": "${command:pickProcess}",
? ? ? ? ? ? "MIMode": "gdb",
? ? ? ? ? ? "setupCommands": [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "description": "Enable pretty-printing for gdb",
? ? ? ? ? ? ? ? ? ? "text": "-enable-pretty-printing",
? ? ? ? ? ? ? ? ? ? "ignoreFailures": true
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "description":? "Set Disassembly Flavor to Intel",
? ? ? ? ? ? ? ? ? ? "text": "-gdb-set disassembly-flavor intel",
? ? ? ? ? ? ? ? ? ? "ignoreFailures": true
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]
? ? ? ? },
? ? ? ? {
? ? ? ? ? ? "name": "LaunchVideo",
? ? ? ? ? ? "localRoot": "${workspaceFolder}/dist-debug/video_agent/",
? ? ? ? ? ? "cwd":"${workspaceFolder}/dist-debug/video_agent/",
? ? ? ? ? ? "program": "index.js",
? ? ? ? ? ? "args": ["-U",? "video"],
? ? ? ? ? ? "env":{ "LD_LIBRARY_PATH" : "./lib" },
? ? ? ? ? ? "request": "launch",
? ? ? ? ? ? "skipFiles": [
? ? ? ? ? ? ? ? "<node_internals>/**"
? ? ? ? ? ? ],
? ? ? ? ? ? "type": "node",
? ? ? ? ? ? "runtimeArgs": ["--preserve-symlinks"]
? ? ? ? }
? ? ]
}
4,操作說明:
這里我們調試的是 video_agent進程。調試webrtc_agent、audio_agent等nodejs? NAN 調用C++ 代碼的進程,操作是一樣的。
第一步,執(zhí)行LaunchVideo, 啟動NodeJS 進程,此時nodejs已經可以斷點調試
需要先停掉用腳本批量啟動的進程:./bin/daemon.sh stop video-agent
第二步,此時會啟動兩個進程, index.js是管理進程, workingNode是具體的工作進程,C++代碼在這個進程,進程id 32505。

第三步,執(zhí)行(gdb) Attach,進程ID 寫上面的id? 32505.??
此時,在源碼目錄 source/agent/video 內的CPP源文件,就可以加上斷點了。

例如斷點加在mcu::VideoMixer::VideoMixer, 打開chrome進入房間https://192.168.3.106:3004/,命中斷點,如下圖。
