2011-07-07 10 views
5

Tengo un vector que está vacío, algo lo llena en algún lado y no puedo encontrarlo. Quiero establecer un punto de interrupción de memoria para que cuando se produzca push_back, el programa se rompa.¿Cómo configuro un punto de interrupción para cuando un vector <int> aumenta en longitud?

Estoy usando Visual Studio 2008, y el problema es que el vector no muestra sus miembros internos en la ventana del reloj (parece tener un formato personalizado). Sólo se ve así:

myVector [0]() std :: vector < int, std :: asignador < int>>

indica talla 0. Algún consejo?

+0

¿Por qué no establecer un punto de interrupción en push_back? – JonathonW

+0

Eso no está mal, pero no atrapará otros casos como redimensionar, asignación, etc. ¡Pero gracias! – baddie

+0

Un vector no tiene funciones virtuales, y solo tiene tres miembros. Uno es un puntero, uno es el tamaño de asignación, y uno es el número de elementos realmente en el vector. Sin conocer el diseño de clase real (aunque podría buscarlo en el encabezado ), no debería ser difícil encontrar por ensayo y error qué dirección de memoria ver (muy probablemente 'vec + sizeof (void *)') – Damon

Respuesta

5

Esta respuesta es para VS 2010: los detalles pueden diferir en otras versiones.

Desde el depurador utiliza un visualizador de datos (o como se llame) para mostrar el estado de un std::vector, usted tiene que mirar en la cabecera <vector> para determinar los nombres de los usuarios reales de la clase y de los cuales uno (s) podría ser responsable de rastrear la cantidad de elementos. Una forma fácil de hacerlo es seguir una llamada al vector::push_back().

En VC++ 2010 este es un puntero de miembro llamado _Mylast.

Así que todo lo que tiene que hacer es establecer un punto de interrupción de datos en las escrituras en &v._Mylast (donde v es el vector que le interesa depurar).

La próxima vez que se agrega un elemento, el depurador se romperá con una pila de llamadas que muestra exactamente dónde.

0

Muestra 0 en VC2010, [0] indica el tamaño del vector y los elementos se mostrarán en(). y puede usar ventanas de salida de memoria para encontrar la dirección de memoria.

Cuestiones relacionadas