3

J'utilise boost :: string_view. (www.boost.org/doc/libs/1_61_0/boost/utility/string_view.hpp)Comment créer un visualiseur de débogage (VC14) pour string_view?

Il possède un membre const * ptr_ et un membre de données intlen non signé. Lors du débogage de son encombrant, comme le visualisateur par défaut montrera le char ptr_ avec plus de caractères que la longueur (comme chaîne_vue n'est pas terminée par un caractère nul).

J'ai essayé de créer mon propre visualiseur en regardant le visualiseur std :: string. Je peux obtenir la chaîne à afficher si je code dur la longueur (pour dire 4), mais je ne peux pas l'obtenir pour utiliser la variable de longueur réelle. Toute aide appréciée. Exemple cassé:

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 
    <Type Name="boost::basic_string_view&lt;char,*&gt;" Priority="High"> 
    <DisplayString>{ptr_,4}</DisplayString> //works... 
    <DisplayString>{ptr_,len_}</DisplayString> //doesnt work... 
    </Type> 
</AutoVisualizer> 

Répondre

2

Après avoir passé une journée entière d'essais et d'erreurs, j'ai trouvé la solution frustrante simple. Il devrait être

"{ptr_,[len_]}" 

Il est documenté ici:

https://msdn.microsoft.com/en-us/library/windows/hardware/dn936815(v=vs.85).aspx

Mon exemple de travail:

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 
    <Type Name="boost::basic_string_view&lt;char,*&gt;" Priority="High"> 
    <DisplayString>{ptr_,[len_]s8}</DisplayString> 
    <Expand> 
     <Item Name="[size]" ExcludeView="simple">len_</Item> 
     <ArrayItems> 
     <Size>len_</Size> 
     <ValuePointer>ptr_</ValuePointer> 
     </ArrayItems> 
    </Expand> 
    </Type> 
</AutoVisualizer>