如何让 std::pair<char *, char *> 在 Visual Studio 的调试器中显示为正确的字符串段?

Posted

技术标签:

【中文标题】如何让 std::pair<char *, char *> 在 Visual Studio 的调试器中显示为正确的字符串段?【英文标题】:How to get std::pair<char *, char *> to display as a proper string segment in Visual Studio's debugger? 【发布时间】:2018-03-21 21:42:25 【问题描述】:

如何让std::pair&lt;char *, char *&gt; 在 Visual Studio 中显示为正确的字符串段,而不是显示为指向以空字符结尾的字符串的两个指针?

【问题讨论】:

有趣的是如何修改 MSVC 调试器的显示方式,即使对于 C++17+,此特定数据类型应替换为 std::string_view @Deduplicator:是的,我知道有人会这么说…… 很高兴为您服务。 【参考方案1】:

创建%UserProfile%\Documents\Visual Studio 2015\Visualizers\custom.natvis(显然,将2015 替换为您的Visual Studio 版本),然后尝试以下操作:

<?xml version='1.0' encoding='utf-8'?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <!-- For more information on how to create debugger visualizers, refer to:
       https://msdn.microsoft.com/en-us/library/jj620914.aspx
       https://msdn.microsoft.com/en-us/library/75w45ekt.aspx
  -->
  <Type Name="std::pair&lt;*,*&gt;">
      <DisplayString Condition="*second - *first &gt;= 0">first,[second - first]</DisplayString>
  </Type>
  <Type Name="std::pair&lt;*,*&gt;">
      <DisplayString Condition="*second._Ptr - *first._Ptr &gt;= 0">first._Ptr,[second._Ptr - first._Ptr]</DisplayString>
  </Type>
</AutoVisualizer>

结果:

【讨论】:

以上是关于如何让 std::pair<char *, char *> 在 Visual Studio 的调试器中显示为正确的字符串段?的主要内容,如果未能解决你的问题,请参考以下文章

检查multimap c ++中是否已存在值

将LPWSTR转换为char * / string

在地图中插入一对键

make_pair

将 std::tuple 的类型转换为 std::pair

如何在 swig & python 中为没有默认构造函数的 std::pair<> 创建接口?