2008-11-08 14 views
7

Al buscar en Google parece que XCode (3.1 en mi caso) debería al menos tratar de darme una sana vista de depuración de contenedores STL, o al menos vectores.Inspeccionando contenedores STL en XCode

Sin embargo, cada vez que voy a ver un vector en el depurador, simplemente veo M_impl, con miembros M_start y M_finish (y un par de otros) - ¡pero nada en el medio! (es una construcción de depuración, por cierto).

¿Me falta una configuración o algo por el estilo?

También he leído que hay macros disponibles que pueden aumentar aún más el visor de depuración para inspeccionar contenedores más complejos, pero no han podido encontrar ninguno.

También me gustaría poder ver std :: wstrings, sin tener que pasar al visor de memoria. Muestra std :: string fine. ¿Hay algo que pueda hacer para mostrar std :: wstring?

Me doy cuenta de que esta es una pregunta un tanto compleja, pero en realidad es parte del mismo tema. ¡Cualquier respuesta completa o parcial apreciada!

Respuesta

1

La capacidad de ver los elementos del contenedor puede depender de la complejidad del tipo de plantilla. Para los objetos triviales como int, bool, etc., y plantillas de clase, incluso simples como

template <class T> struct S { T m_t; } 

que normalmentetengo ningún problema de visión elementos vectoriales en la vista de variables del depurador. Digo normalmente porque parece haber errores ocasionales que causan cosas, particularmente cuando se depuran, para no comportarme de la manera que esperaba. Una de esas cosas es la basura o información totalmente inútil en la vista variable. Por lo general, una reconstrucción limpia del objetivo (oa veces incluso un reinicio más drástico de XCode seguido de una reconstrucción limpia) soluciona el problema.

En cuanto a los otros tipos de contenedores, lo más probable es que sea difícil de ver esta información de manera eficiente. Por ejemplo, un mapa a menudo se implementa como un árbol rojo-negro. El depurador debería saberlo con anticipación para poder caminar correctamente por el árbol y mostrarle todas las claves y valores. Es probable que esto requiera mucho de Xcode o GDB, especialmente porque el primero se enfoca más en Objective-C y en C simple que en C++ (de ahí el hecho de que los espacios de nombres tienden a matar la finalización del código a pesar de su ubicuidad e importancia).

+0

Sí, me doy cuenta de que los mapas y tales no son triviales, y definitivamente requerirían una lógica de implementación (aunque podría imaginarse un sistema donde usa la API pública para obtener la información). Sé que otros IDEs lo han logrado. Aunque pensé que al menos debería ver vectores. – philsquared

+2

Como Visual Studio ha logrado hacer esto al menos desde 2008, no creo que esté esperando demasiado – grim

2

Puede crear Data formatters para diferentes tipos de variables para que se muestren mejor :-).

1

Pruebe usar el depurador GDB en Proyecto-> Editar esquema ... y considere cambiar su compilador a LLVM GCC 4.2 en la Configuración de compilación del proyecto (en Opciones de compilación -> Compilador para C/C++/Objective-C).

En XCode 4, encontré que necesitaba esta configuración para ver elementos como un estándar :: vector de V3f donde V3f es un tipo de vector flotante con plantillas.

Tenga en cuenta que creo que no puede usar ARC (conteo automático de referencias) con LLVM GCC 4.2.

Cuestiones relacionadas