我正在開發一個在 ESP32 微控制器上運行的基于 ESP-IDF 的專案。
該專案有一堆components我寫過的不同的 C 庫(ESP-IDF 稱之為它們)。通常我編譯整個專案并將其安裝在 ESP32 上,一切正常。
我一直在撰寫測驗,我如何使測驗作業與標準構建程序有點不同。對于每組測驗,我只測驗我的一個 C 組件。(例如“無線”或“用戶輸入”等)我模擬了我的其余組件和我的代碼使用的 ESP-IDF 代碼,這讓我只測驗“無線”,例如。
為此,我使用CppUTest了一系列 makefile。makefile 結構基于這里的結構:https ://github.com/memfault/interrupt/tree/master/example/unit-testing/minimal
這是我關注的文章,描述了生成檔案/測驗設定。 https://interrupt.memfault.com/blog/unit-testing-basics#setting-up-cpputest
所以,有一個主 makefile,它會找到所有每個組件的 makefile。這些每個組件的 makefile 指定.cpp要編譯的檔案、要在哪些檔案夾中找到您的匯入、您的測驗在哪里等等。所有這些都很好。
我所處的情況是我希望能夠在 VSCode 中運行除錯器來設定斷點、暫停執行并在代碼中的給定點檢查我的變數。
只要在測驗中這樣做就足夠了。我的主要 ESP-IDF 構建程序中不需要除錯器。
但是我在使用這種設定時遇到了最具挑戰性的時間。因為不只是一個 make 檔案。
這是我想做的核心。我希望能夠設定一個斷點,然后做一些事情來告訴我的代碼使用給定的.cpp檔案串列和頭檔案匯入位置進行編譯。就像在那些每個組件的測驗 make 檔案中一樣。我希望我的代碼執行到那個斷點,然后在 VSCode 中給我調味。
關于我如何朝這個方向作業的任何建議都會非常有幫助。
uj5u.com熱心網友回復:
我能夠解決這個問題。這就是我所做的...
首先,我進行了測驗。現在,當我查看時,unit_tests/build/我會看到每個 make 檔案的子檔案夾。在這些子檔案夾中有可執行檔案。例如,unit_tests/build/data/data_tests
我在我的倉庫中創建了一個.vscode/launch.json檔案。它看起來像這樣...
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch for Dispatch Component",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/unit_tests/build/dispatch/dispatch_tests",
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"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": "(gdb) Launch for Wireless Component",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/unit_tests/build/wireless/wireless_tests",
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"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": "(gdb) Launch for Data Component",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/unit_tests/build/data/data_tests",
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"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
}
]
},
]
}
請注意,在該launch.json檔案中有多個configurations. 每個組件/制作檔案一個。name每個配置的 說明它用于哪個組件,并且該欄位program指向測驗構建的可執行檔案。
如果我在Data組件中并且想要進入斷點,這就是我所做的。
- 確保有一個
Makefile_data.mk命中我的斷點的測驗。 - 單擊
Run and DebugVSCode 左側的按鈕。(播放按鈕的錯誤) - 單擊頂部的下拉選單
Run and Debug并選擇Launch for Data Component - 打游戲。
現在我的測驗運行了,當它們到達我的資料組件代碼中的斷點時,它們將暫停。相當光滑!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/515038.html
上一篇:沒有回傳值的單元測驗函式
