2012-09-29 30 views
10

Estoy usando (Apple) LLVM 4.1 en Xcode 4.5 (pero vi lo mismo en una versión beta anterior). Lo tengo como C++ 11 y estoy usando libC++ (la nueva versión de LLVM habilitada para C++ 11 de la biblioteca std).Los pasos del depurador son más profundos al tratar de salir de C++ 11 std lib

En una compilación de depuración, si trato de pasar el código que llama a una función de biblioteca std (por ejemplo, un constructor std :: vector), el depurador se detiene en la implementación de std lib y si trato de salir ¡Más adentro! Puede tomar varios pasos (a veces 10 o más) antes de volver a mi propio código (y nunca quise intervenir en este primer lugar).

Siempre parece haber una macro _LIBCPP_DEBUG a la vista, así como _LIBCPP_INLINE_VISIBILITY - pero estas parecen estar en todas partes, así que no estoy seguro de que sea una correlación. Sin embargo, parece plausible que tenga algo que ver con la forma en que funciona la línea interna.

No he podido encontrar ningún otro ejemplo de alguien más con este problema, sin embargo, para mí, ha persistido en varias versiones beta del lanzamiento y una reinstalación completa del sistema operativo.

¿Alguien más ha visto esto? - pero mejor aún sabe lo que está pasando?

+0

Aún no actualicé mi XCode, pero cuando depuro el código que se compiló en el modo de lanzamiento, el depurador puede enloquecer algunas veces. ¿Estás viendo esto en código compilado en modo de depuración? –

+0

Sí, lo siento, quería decir que era una versión de depuración. He editado la pregunta para reflejar eso. – philsquared

+0

También estoy bastante seguro de que estaba viendo esto en una versión beta de una versión anterior, 4.2 o 4.3, tal vez. En ese momento, sospeché que era solo una versión beta y que quedaría solucionado por el lanzamiento (no, no envié un radar, solo GTFO, consulte http://fixradarorgtfo.com). – philsquared

Respuesta

7

lldb en Xcode 4.5 no maneja el paso por encima de las funciones en línea. La biblioteca estándar de libC++ tiene muchas funciones que están siempre en línea, incluso cuando están compiladas en -O0, lo que hace que esto sea un problema. Parece que Jim Ingham trabajó en esto hace aproximadamente un mes, p. vea el primer parche http://llvm.org/viewvc/llvm-project?view=rev&revision=163044 y varios parches de seguimiento durante la siguiente semana o dos, pero por supuesto aún no se encuentran en una versión de lldb. Puede construir y usar una versión de línea de comando de lldb desde el sitio público, http://lldb.llvm.org/ (consulte en particular http://lldb.llvm.org/build.html), el único truco es recordar seguir las instrucciones de firma de código en lldb/docs/code-signing.txt.

+0

Gracias (lo siento, no he visto su respuesta antes). Me hace sentir mejor que no sea solo yo. Pero frustrado de que no haya ninguna solución, actualmente, que no implique el uso de un lLDB "no oficial". Parece que debería resolverse a tiempo, sin embargo. – philsquared

+0

Casi Navidad y todavía tiene este problema (o lo tiene de nuevo, de cualquier manera, todavía le cae la pelota a Apple en esto). – WhozCraig

+0

Xcode 4.5.x sigue siendo la versión actualmente lanzada, así que sí, el soporte de código en línea todavía no está disponible en un Xcode lanzado. El escalonamiento integrado funciona correctamente con las fuentes actuales del compilador y del depurador: todavía hay casos de esquina que entran en una función estándar de vez en cuando, pero eso depende de la información de depuración del compilador. –

1

He visto esto también, y no solo con libC++, también con libstdC++ (la biblioteca estándar GNU C++, utilizada por GCC y por clang en C++ 03-mode). Siempre he pensado que se debe a la creación de líneas, lo que a veces sucede también en las versiones de depuración.

+0

Debo admitir que nunca lo he visto en el modo C++ 03, que uso bastante – philsquared

Cuestiones relacionadas