使用Visual Studio 調式NDK so 庫時,調試工具無法顯示vector內容
最近在研究C++開發安卓端so庫,demo使用xamarin.android作為載體來驗證算法庫文件的準確性。調試過程中發現vector中的內容無法顯示集合詳細。如下圖

研究了半天(參考鏈接2、3),發現需要使用.natvis文件進行debugger 可視化自定義功能。
步驟:
1.在VS的C++項目中新增:.natvis文件。

2.找到文件“Microsoft.Android.natvis”。
目錄:Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
搜索里面的vector內容,作為參考:
<!-- llvm stl --> <Type Name="std::__1::vector<*>"> <DisplayString>{{size={__end_ - __begin_}}}</DisplayString> <Expand> <Item Name="[size]" ExcludeView="simple">__end_ - __begin_</Item> <Item Name="[capacity]" ExcludeView="simple">__end_cap_.__first_ - __begin_</Item> <Item Name="[allocator]" ExcludeView="simple">__end_cap_</Item> <ArrayItems> <Size>__end_ - __begin_</Size> <ValuePointer>__begin_</ValuePointer> </ArrayItems> </Expand> </Type>
3.這里面的type類型和我們看到的不一致,修改后加入到自定義的.natvis文件中。
<?xml version="1.0" encoding="utf-8"?> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="std::__ndk1::__vector_base<*>"> <DisplayString>{{size={__end_ - __begin_}}}</DisplayString> <Expand> <Item Name="[size]" ExcludeView="simple">__end_ - __begin_</Item> <Item Name="[capacity]" ExcludeView="simple">__end_cap_.__first_ - __begin_</Item> <Item Name="[allocator]" ExcludeView="simple">__end_cap_</Item> <ArrayItems> <Size>__end_ - __begin_</Size> <ValuePointer>__begin_</ValuePointer> </ArrayItems> </Expand> </Type> </AutoVisualizer>
再次調試,可以發現多了一個欄目:Visualized View,可以查看。

capacity字段缺失,對我來說不重要,可以在.natvis文件中去除。有需要的小伙伴可以研究看看。
參考鏈接:
1. Natvis support for Android debugging | C++ Team Blog (microsoft.com)
2. 在Visual Studio中使用Debug Visualizers在C++中實現對原始類的自定義調試信息顯示 - X_Jun - 博客園 (cnblogs.com)
3. Visual Studio 2015 cannot inspect elements of vector (microsoft.com)

浙公網安備 33010602011771號