PDA

Bekijk de volledige versie : exceptions catching



dfayruzov
20-03-2007, 19:52
Друзья, похоже мы наткнулись на оччеень неприятный баг в uclibc, для иллюстрации покажу небольшу программу:

[dfayruzov@wl500g dfayruzov]$ cat extest.cc
#include <iostream>
using namespace std;

int main () {
cout << "Exception test" << endl;
try
{
throw 20;
}
catch (int e)
{
cout << "An exception occurred. Exception Nr. " << e << endl;
}

cout << "End." << endl;

return 0;
}


Компилирую ее с помощью:

g++ -o extest extest.cc

Запускаю, и:

[dfayruzov@wl500g dfayruzov]$ ./extest
Exception test
terminate called after throwing an instance of 'int'
Aborted


Эксшепн не словился! Как так? И как это полечить?

exxon
20-03-2007, 20:50
а если сделать так?

int main () {
cout << "Exception test" << endl;
try
{
throw 20;
}
catch (int e)
{
cout << "An exception occurred. Exception Nr. " << e << endl;
}
catch (...)
{
cout << "An unknown exception occurred" << endl;
}

dfayruzov
20-03-2007, 21:24
#include <iostream>
#include <iostream>
using namespace std;

int main () {
cout << "Exception test" << endl;
try
{
throw 20;
}
catch (int e)
{
cout << "An exception occurred. Exception Nr. " << e << endl;
}
catch (...)
{
cout << "An unknown exception occurred" << endl;
}

cout << "End." << endl;

return 0;
}
~
[dfayruzov@wl500g dfayruzov]$ g++ -o extest2 extest2.cc
[dfayruzov@wl500g dfayruzov]$ ./extest2
Exception test
terminate called after throwing an instance of 'int'
Aborted

dfayruzov
22-03-2007, 10:42
Похоже, известный баг в uclibc:
http://uclibc.org/lists/uclibc/2006-July/015989.html