2008-09-19 17 views

Respuesta

13

Para los vectores, este thread en los foros msdn tiene un fragmento de código para configurar un reloj en un índice vectorial que podría ayudar.

+16

Para los perezosos para seguir el enlace, la solución es '((v) ._ Myfirst) [index]' – Izzy

3

Visual Studio 2008, al menos para mí, muestra el contenido de los contenedores STL en el cuadro de contenido de mouseover estándar.

+0

Yo también y estoy seguro VS2 005 hizo lo mismo. – Rob

1

También puede hacer clic en cualquier valor en su reloj, y seleccione 'Add Watch'. Esto puede ser útil si solo necesita mirar un elemento de un mapa o conjunto.

También conduce a la solución que christopher_f publicada por vectores - ((v) ._ MyFirst) [índice]

17

Si quiere ver más de un elemento, al mismo tiempo, puede añadir una coma y el número de elementos que así:

(v._Myfirst)[startIndex], count

sin embargo, tenga en cuenta que la cuenta debe ser una constante, no puede ser el resultado de una expresión.

+0

pequeña diferencia de nombres en Visual Studio 2010 (¿y posiblemente otras versiones?): '(V._M_start) [startIndex], count' –

+0

tuve que hacer' (v._Myfirst + startIndex), count' en VS2010 SP1 – Gadi

+0

tuve hacer 'v._Myfirst(), count' en VS2015. – Neptilo

11

En VS2005 y VS 2008 puede ver el contenido de los contenedores STL. Las reglas para acceder a los datos se encuentran en autoexp.dat "c: \ Archivos de programa \ Microsoft Visual Studio 9 \ Common7 \ Packages \ Debugger \ autoexp.dat".

AutoExp.dat está destinado a ser personalizado. Sin embargo, las defs de STL están bajo una sección llamada [Visualizador]. Si puedes descifrar el lenguaje utilizado en esa sección, más poder para ti, sin embargo, recomendaría simplemente dejar esa parte en paz.

Autoexp.dat existía en VS2003, pero no había soporte para contenedores STL ([Visualizer] no existía). En VS2003, debe navegar manualmente por la representación de datos subyacente.

Al modificar autoexp.dat, es posible agregar reglas para navegar la representación de datos de sus propios tipos para que sean más fáciles de depurar. Si haces esto, solo deberías agregar lo que está debajo de [AutoExp]. Tenga cuidado y mantenga una copia de seguridad de este archivo antes de modificarlo.

1

El método anteriormente mencionado [((v) ._ Myfirst) [index]] funcionará solo para contenedores específicos (std :: vector) no para todos los contenedores STL posibles. Por ejemplo, si desea ver el contenido de std :: deque, debe buscar otro método para navegar por el contenido en std :: deque.

Tal vez usted puede probar la siguiente configuración similar a resolver su problema

[He probado esta configuración sólo para Visual Studio 2010 Professional versión instalada con Microsoft Visual Studio 2010 Service Pack 1]

Paso 1 : Desinstalar el Service Pack 1 de Microsoft Visual Studio 2010 - para el trabajo de mi proyecto, realmente no necesito el Service Pack 1, por lo que la desinstalación del Service Pack 1 no causará ningún problema en mi caso.

Paso 2: reinicie su sistema.

Paso 3: Este paso no es necesario si no obtiene Error 'ENLACE: error fatal LNK1123: error durante la conversión a COFF: el archivo no es válido o está dañado'. ver de otro modo a través

Proyecto Propiedad -> Linker (General) -> Cambiar Habilitar incremental ligarse a n (/ incremental: NO)

7

Para ver el enésimo elemento de un contenedor en el depurador de Visual Studio, utilice:

container.operator[](n) 
+0

parece más fácil que la opción _Mi primera, utilicé & para ver el búfer en bruto en la ventana de memoria – paulm

0

En vs 2015, no pude conseguir cualquiera de estos trabajo
así, he escrito un poco de código

1: tenía vector de vector de elementos largos largos

std::vector<std::string> vs(M_coins + 1); 
for (unsigned long long i = 0; i <= M_coins; i++) { 
    std::for_each(memo[i].begin(), memo[i].end(), [i, &vs](long long &n) { 
     vs[i].append(std::to_string(n)); 
     }); 
} 
// now vs is ready for use as vs[0], vs[1].. so on, for your debugger 

básicamente lo que hice fue convertir el vector en cadena. tenía un vector de vector, así que tenía un vector de cadena para llenar.

2: si sólo tiene un vector de elementos largos largos, a continuación, sólo convertir de la siguiente manera:

std::vector<std::string> s; 
std::for_each(v1.begin(), v1.end(), [&s](long long &n) { 
    s.append(std::to_string(n)); 
    }); 
// now s is ready for use, for your debugger 

espero que ayudó.

3

El método más simple es que tiene que preparar un puntero para ver variables como esta.

vector<int> a = { 0,1,2,3,4,5 }; 
int* ptr = &a[0]; // watch this ptr in VisualStudio Watch window like this "ptr,6". 

me trataron "a._Myfirst [0]" en VisualStudio2015, pero fue no muestra datos de la matriz.

Si puede usar "natvis", resolverá sus problemas.

Ésta es "sample.natvis" para std :: visualización de datos vectoriales para Visual Studio 2015.

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 
    <Type Name="std::vector&lt;*&gt;"> 
    <DisplayString>{{ size={_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst} }}</DisplayString> 
    <Expand> 
     <Item Name="[size]" ExcludeView="simple">_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst</Item> 
     <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst</Item> 
     <ArrayItems> 
     <Size>_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst</Size> 
     <ValuePointer>_Mypair._Myval2._Myfirst</ValuePointer> 
     </ArrayItems> 
    </Expand> 
    </Type> 
</AutoVisualizer> 

Antes enter image description here

Después enter image description here

+0

gracias ayudo – David

Cuestiones relacionadas