Después de actualizar a Xcode 3.2 y Snow Leopard, mis compilaciones de depuración están rotas y fallan en tiempo de ejecución. Los Stringstreams no parecen funcionar. Funcionan en modo de lanzamiento.Creaciones de depuración C++ se rompieron en Snow Leopard Xcode
Lo he reducido a una combinación de GCC 4.2, OSX SDK 10.6 y el símbolo del preprocesador _GLIBCXX_DEBUG. Estos son los valores predeterminados para las nuevas configuraciones de Debug de los proyectos Xcode.
Este código muestra el problema:
#include <iostream>
#include <string>
#include <sstream>
int main (int argc, char * const argv[]) {
std::stringstream stream;
std::cout << " expected actual" << std::endl;
std::cout << "stream.bad: 0 " << stream.bad() << std::endl;
std::cout << "stream.fail: 0 " << stream.fail() << std::endl;
std::cout << "stream.eof: 0 " << stream.eof() << std::endl;
std::cout << "stream.good: 1 " << stream.good() << std::endl;
stream.exceptions(std::ios::badbit | std::ios::failbit | std::ios::eofbit);
try{
stream << 11; //< Does not work as expected (see output)
}catch (std::bad_cast &e) {
std::cout << "Unexpected bad_cast: " << e.what() << std::endl;
}catch(std::exception &e){
std::cout << "Unexpected exception: " << e.what() << std::endl;
}
std::cout << " expected actual" << std::endl;
std::cout << "stream.bad: 0 " << stream.bad() << std::endl;
std::cout << "stream.fail: 0 " << stream.fail() << std::endl;
std::cout << "stream.eof: 0 " << stream.eof() << std::endl;
std::cout << "stream.good: 1 " << stream.good() << std::endl;
std::cout << std::endl;
std::cout << "EXPECT: " << 11 << std::endl;
std::cout << "ACTUAL: " << stream.str() << std::endl;
std::cout << std::endl << "Done" << std::endl;
return 0;
}
La inserción stringstream debería funcionar, pero cuando se utiliza GCC 4.2 y _GLIBCXX_DEBUG, el operador '< <' lanza una excepción, y lo malo y se establecen fallar bits.
He intentado varias combinaciones de compilador y SDK con estos resultados: - El uso de GCC 4.2, LLVM-GCC o CLANG con SDK 10.6 NO funciona. - El uso de GCC 4.2, LLVM-GCC o CLANG con SDK 10.5 funciona. - El uso de GCC 4.0 con SDK 10.5 o 10.6 funciona.
Si _GLIBCXX_DEBUG está roto o no es compatible (con SDK 10.6 y GCC 4.2), ¿por qué es esto el predeterminado para las configuraciones de depuración en nuevos proyectos (línea de comandos C++)?
Por supuesto, ya GCC es de código abierto, se puede fijar siempre usted mismo – Crashworks
Gracias, ¿Esto es solo para GCC de Apple? Funciona en otras plataformas con esta versión. Si no es compatible, ¿por qué es el valor predeterminado en XCode? ¿Apple documenta esto en cualquier lugar? – crmoore
@cdespinosa, ¿Tiene alguna fuente donde dice que el modo de depuración de STL no es compatible?Además, probé esto con OSX Lion, y todavía no funciona. – highBandWidth