Seite 1 von 1

C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 15:26
von Spiele Programmierer
Seit einiger Zeit habe ich das Problem, dass alle C++ STL Container in Visual Studio keine übersichtliche Anzeige mehr anbieten.
Wenn ich in Visual Studio eine Variable mit STL-Typ untersuche, sieht das so aus:
StdVectorHatKeineLust.png
  1. Ich verwende Visual Studio 2015 Update 3
  2. Alle STL Container sind betroffen: vector, map, unique_ptr, etc.
  3. Einige meiner eigenen Typen haben eine Natvis-Visualisierung. Die funktioniert. (Es ist eine .natvis-Datei im Projekt)
  4. Das Problem besteht in allen Projekten. Auch wenn ich ein völlig neues Projekt aufmache.
Hat jemand eine Idee, was das sein könnte?

Ich ignoriere das seit einiger Zeit, indem ich die verschachtelten Member der Implementierung manuell anschaue, und "Watch"es erstelle um zB. bei std::vector damit die Größe auszurechnen bzw. alle Elemente zu sehen. Aber das ist über die Zeit super mühsam (... Smart Pointer) und andere Container sind noch viel komplexer zu untersuchen. Das kostet dann doch ganz schon viele Nerven und Zeit.

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 15:58
von Chromanoid

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 16:08
von Spiele Programmierer
Ich kann eine Natvis für STL Container selbst erstellen und die funktioniert dann auch.
(Der Code für den std::vector ist übrigens nicht mehr ganz aktuell, weil jetzt alle Member in "_Mypair._Myval2." drinstecken.)

Aber warum funktionieren die integrierten STL Visualisierungen nicht?

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 16:28
von Chromanoid
Ich rate mal weiter ins Blaue ^^
Da mal reingeschaut? %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers
Vielleicht wurden die Dateien von Dir aus Versehen gelöscht oder sind von Deinem Benutzer aus nicht ladbar?

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 16:51
von Krishty
Vielleicht hast du sie versehentlich geändert? Wenn ein Syntaxfehler drin ist, lädt die komplette NATVIS nicht mehr.

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 16:54
von Spiele Programmierer
Ok, also in "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers" gibt es eine Datei "stl.natvis" die scheinbar Definitionen für VS 2013, 2015, std::vector<bool, *> und std::vector<*> enthält. :)
Mir ist nicht bewusst das ich da mal etwas geändert habe.

EDIT:
Habe sie mal hier hochgeladen, dann könnt ihr selbst schauen:
stl.zip
(6.55 KiB) 379-mal heruntergeladen
EDIT2:
Wenn ich sie direkt dem Projekt hinzufüge geht es auch nicht.
Wenn ich alles außer dem Teil zum std::vector lösche allerdings schon...

EDIT3:
Ganz komisch. Das geht als Projekt-Natvis:

Code: Alles auswählen

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="std::vector<*>">
      <DisplayString>{{ size={_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst} }}</DisplayString>
      <Expand>
          <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst</Item>
          <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item>
          <ArrayItems>
              <Size>_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst</Size>
              <ValuePointer>_Mypair._Myval2._Myfirst</ValuePointer>
          </ArrayItems>
      </Expand>
  </Type>
</AutoVisualizer>
Aber das nicht:

Code: Alles auswählen

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="std::vector<*>">
      <DisplayString>{{ size={_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst} }}</DisplayString>
      <Expand>
          <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst</Item>
          <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item>
          <ArrayItems>
              <Size>_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst</Size>
              <ValuePointer>_Mypair._Myval2._Myfirst</ValuePointer>
          </ArrayItems>
      </Expand>
  </Type>
  <Type Name="std::_Vector_iterator<*>">
      <AlternativeType Name="std::_Vector_const_iterator<*>" />
      <SmartPointer Usage="Indexable">_Ptr,na</SmartPointer>
      <Expand>
          <Item Name="[ptr]">_Ptr</Item>
      </Expand>
  </Type>
</AutoVisualizer>
Scheinbar aber nicht das einzige Problem. :?:

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 17:18
von Chromanoid
Das hier schon mal angeklickt?
Bild
http://stackoverflow.com/a/36631739

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 17:21
von Spiele Programmierer
Ne, aber sehr gute Idee.
Binäre Suche ist doch bisschen schwierig bei vielen Problemen. ;)

UPDATE
Aha:

Code: Alles auswählen

Natvis: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\stl.natvis(152,37): Fatal error: Der Inhalt des Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}SmartPointer' ist gemäß dem Inhaltsmodell des übergeordneten Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Type' nicht gültig.
    Erwartet: {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}AlternativeType, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Version, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}MostDerivedType, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}CustomVisualizer, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}DisplayString, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}StringView, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Expand, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}UIVisualizer.
Natvis: T:\ConsoleApplication1\stl.natvis(152,37): Fatal error: Der Inhalt des Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}SmartPointer' ist gemäß dem Inhaltsmodell des übergeordneten Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Type' nicht gültig.
    Erwartet: {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}AlternativeType, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Version, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}MostDerivedType, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}CustomVisualizer, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}DisplayString, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}StringView, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Expand, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}UIVisualizer.
UPDATE2:
Wenn ich alle <SmartPointer> entferne kommt ein neues Problem:

Code: Alles auswählen

Natvis: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\stl.natvis(152,37): Fatal error: Der Inhalt des Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}SmartPointer' ist gemäß dem Inhaltsmodell des übergeordneten Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Type' nicht gültig.
    Erwartet: {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}AlternativeType, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Version, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}MostDerivedType, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}CustomVisualizer, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}DisplayString, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}StringView, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}Expand, {http://schemas.microsoft.com/vstudio/debugger/natvis/2010}UIVisualizer.
Natvis: T:\ConsoleApplication1\stl.natvis(906,68): Fatal error: Das Attribut 'Name' des Elements '{http://schemas.microsoft.com/vstudio/debugger/natvis/2010}ValueNode' ist im DTD/Schema nicht definiert .
Wie kann es sein dass die .natvis soviele ungültige Einträge enthält?

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 17:28
von Chromanoid
Die Fehlermeldung führt dann hier zu: https://connect.microsoft.com/VisualStu ... izer-error

Musst wohl auf das nächste Update warten, wenn Du nicht selbst Hand anlegen willst.
Von Roman Hiestand am 28.07.2016 um 01:39 bereitgestellt
I have the same issue as user 23W since I upgraded from Visual Studio 2015 Update 2 to Update 3. The file
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\stl.natvis
does not validate against
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Xml\Schemas\1033\natvis.xsd
It does validate, however, against
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Xml\Schemas\1031\natvis.xsd

So, as a temporary workaround, I copied the file from 1031 to 1033. Please see attached ZIP file containing all 3 files.

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 17:35
von Spiele Programmierer
:?
Mich wundert dann aber, dass ich niemanden im Internet mit dem Problem finden könnte.
Das Problem müssten doch die meistenr Nutzer haben? (Oder verwendet niemand die Updates?)

Naja danke für eure Hilfe!

Re: C++/VS - STL Container zeigen Inhalt nicht mehr an

Verfasst: 23.08.2016, 17:41
von Chromanoid
Vielleicht hat das was mit Deiner Installationshistorie oder den Regionseinstellungen zu tun. In dem Ticket schreibt Roman Hiestand:
My installation history is like this: I installed the community edition of Visual Studio 2015 RTM on a Windows 7. The display language of Windows is English, but the Region settings are for Switzerland (German). I guess because of this setting Visual Studio installed in German, but I changed this using the vs_langpack to English. I then upgraded to Visual Studio 2015 Upgrade 1, then to 3.
[...]