Po aktualizacji do Xcode 3.2 i Snow Leopard, moje kompilacje debugowania są uszkodzone i kończą się niepowodzeniem. Stringstreamy nie działają. Działają w trybie Release.C++ Budowanie debugowania zepsuło się w Snow Leopard Xcode
Zawęziłem to do kombinacji GCC 4.2, OSX SDK 10.6 i symbolu pre-procesora _GLIBCXX_DEBUG. Są to ustawienia domyślne dla nowych konfiguracji debugowania projektów Xcode.
Kod ten przedstawia problem:
#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;
}
Wprowadzenie stringstream powinny pracować, a przy użyciu GCC 4.2 i _GLIBCXX_DEBUG operator „< <” zgłasza wyjątek i złe i ustawione są odporne na uszkodzenia bitów.
Próbowałem różnych kombinacji kompilatora i SDK z tymi wynikami: - Używanie GCC 4.2, LLVM-GCC lub CLANG z SDK 10.6 NIE działa. - Działa za pomocą GCC 4.2, LLVM-GCC lub CLANG z SDK 10.5. - Używanie GCC 4.0 z wersją SDK 10.5 lub 10.6.
Jeśli _GLIBCXX_DEBUG jest zepsuty lub nie jest obsługiwany (z SDK 10.6 i GCC 4.2), to dlaczego jest to ustawienie domyślne dla konfiguracji debugowania w nowych projektach (linia poleceń C++)?
Oczywiście, ponieważ GCC jest open source, zawsze można naprawić samemu. – Crashworks
Dzięki, Czy jest to tylko GCC firmy Apple? Działa na innych platformach z tą wersją. Jeśli nie jest obsługiwany, to dlaczego jest on domyślny w XCode? Czy Apple dokumentuje to w dowolnym miejscu? – crmoore
@cdespinosa, czy masz jakieś źródło, w którym jest napisane, że tryb debugowania STL nie jest obsługiwany.Ponadto próbowałem tego z OSX Lion i nadal nie działa. – highBandWidth