2012-09-15 17 views
6

Tengo un problema cuando trato de depurar una iteración de una lista en C++.Problemas de depuración con libC++ en Xcode 4.4

me hizo una sencilla aplicación de prueba:

int main(int argc, const char * argv[]) 
{ 
// insert code here... 
std::cout << "Hello, World!\n"; 

std::list<int> list; 
list.push_back(1); 
list.push_back(2); 
--> list.push_back(3); //Line before step over 
    for (std::list<int>::const_iterator i = list.begin(); i != list.end(); i++) 
    { 
     std::cout << *i << std::endl; 
    } 
    return 0; 
} 

Durante la depuración, cuando estoy en la línea marcada con una flecha, cuando me paso más, comienza interviniendo en el código de un archivo de C++: la lista ' '. Tengo que pasar 15 veces hasta que finalmente llegue al código dentro de la instrucción for.

Este problema solo ocurre en Xcode 4.4. En Xcode 4.3, la depuración funciona perfectamente.

Aquí hay algunos escenarios diferentes, con diferentes resultados:

  1. Uso LLVM GCC 4.2 como el compilador → Funciona bien.
  2. Utilice el compilador Apple LLVM 4.0 y establezca libstdC++ (biblioteca estándar GNU C++) para la biblioteca estándar de C++ → Funciona bien.
  3. Compilador Apple LLVM 4.0 y set libC++ (biblioteca estándar LLVM C++ con soporte para C++ 11) para la biblioteca estándar de C++ → El problema ocurre.

En el proyecto que estoy trabajando, estamos utilizando de Apple LLVM compilador 4.0 y libC++ (LLVM biblioteca de C++ estándar con soporte para C++ 11) por lo que necesitamos para resolver este problema para el escenario 3).

¿Alguien sabe lo que podría estar pasando y si hay una solución para ello?

+1

Esto no ayuda, pero me encuentro con este tipo de cosas todo el tiempo con Xcode. Parece más prevalente con gdb que con lldb, pero ninguno de los dos funciona bien. Ha sido así por mucho tiempo. Cuando presento un error al respecto, generalmente se soluciona, pero luego aparece otra instancia en otro lugar. No estoy seguro de por qué Xcode tiene estos problemas, pero otras herramientas de desarrollo populares no lo hacen. – user1118321

Respuesta

2

Es un problema con lldb/llvm interactuando con libC++, lo he visto desde que lo habilitamos, aunque creo que solo los desarrolladores de libC++/lldb podrán saber de qué se trata.

Si bien esto no es una solución, parece ser un problema desde la línea de comandos con llvm 3.1 (versión actual con Xcode 4.5). Si hago:

clang++ -g -O0 -stdlib=libc++ -std=c++11 test.cpp -o test 
lldb test 
breakpoint set --file test.cpp --line 8 

... y luego tratar de utilizar 'n' para recorrer hasta el final del principal, que salta a la fuente de la lista en:

* thread #1: tid = 0x1c03, 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543, stop reason = step over 
    frame #0: 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543 
    540  { 
    541 #if _LIBCPP_DEBUG_LEVEL >= 2 
    542   return iterator(__end_.__next_, this); 
-> 543 #else 
    544   return iterator(__end_.__next_); 
    545 #endif 
    546  } 

estoy de acuerdo, esto realmente ralentiza el tiempo de desarrollo/depuración, y debe informarse al lldb devs

Cuestiones relacionadas