編輯:已解決。問題更加溫和 - 我有兩個函數在一行代碼中互相調用 - 使用lexical_cast
和其他一個崩潰。有趣的是,我只能通過噴灑很多cout
的信息來發現這個問題,因爲在碰撞時沒有回溯,並且當調試線路成爲線路時,gdb出於任何原因顯示錯誤的lexical_cast
是罪魁禍首(並且我沒有別看另一個,嘆氣)。謝謝您的幫助!在共享庫中提升異常
我使用的是gcc 4.1.2和boost 1.48。我有一個共享庫的模板函數內部下面的代碼:
try {
boost::lexical_cast<T>(s);
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
轉換失敗,但異常不會被逮住(它確實繁殖和終止程序,但這種趕超條款沒有按趕不上)。 T
是long
和s
是std::string
等於"234a234"
。 (我也試過包裝在#pragma GCC visibility push(default)
包括提升包括在內,並且還嘗試在鏈接時添加-shared-libgcc
標誌,並且沒有做任何事情。)
雖然它變得更好。在以下兩種情況下的例外情況被逮住:
try {
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
和令人驚訝這一個:
try {
boost::lexical_cast<T>(s);
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
上發生了什麼事情,更重要的任何想法如何解決這一問題?
爲什麼抓不住的boost :: bad_lexical_cast&或std ::例外&呢?它不回答你的問題,但也許它會幫助編譯器。 – Joel 2012-01-06 19:44:44
試過 - 沒有幫助:( – eddi 2012-01-06 19:48:47