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

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

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

Beitrag 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.
Zuletzt geändert von Spiele Programmierer am 23.08.2016, 19:55, insgesamt 1-mal geändert.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4275
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

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

Beitrag von Chromanoid »

Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

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

Beitrag 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?
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4275
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

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

Beitrag 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?
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag von Krishty »

Vielleicht hast du sie versehentlich geändert? Wenn ein Syntaxfehler drin ist, lädt die komplette NATVIS nicht mehr.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

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

Beitrag 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) 392-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. :?:
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4275
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

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

Beitrag von Chromanoid »

Das hier schon mal angeklickt?
Bild
http://stackoverflow.com/a/36631739
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

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

Beitrag 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?
Zuletzt geändert von Spiele Programmierer am 23.08.2016, 17:29, insgesamt 1-mal geändert.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4275
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

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

Beitrag 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.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

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

Beitrag 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!
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4275
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

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

Beitrag 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.
[...]
Antworten