View previous topic :: View next topic |
Author |
Message |
AlbertoSSj Tux's lil' helper
Joined: 21 Nov 2004 Posts: 135
|
Posted: Sat May 07, 2005 9:23 am Post subject: [OT] C++, Gestire le eccezioni |
|
|
Ho fatto un po di prove, ed ho visto che gcc la dichiarazione delle throw() la ignora completamente.
Invece a me servirebbe un controllo stretto, cioè se qualcosa mi può lanciare eccezioni io lo devo sapere ( devo mettere mani in un magma di codice per la tesi :'( ).
Adesso infatti mi capitano degli abort random, che non so dove andare a beccare :\
tnk |
|
Back to top |
|
|
Danilo l33t
Joined: 05 Feb 2004 Posts: 747 Location: Italy
|
Posted: Sat May 07, 2005 3:32 pm Post subject: Re: [OT] C++, Gestire le eccezioni |
|
|
AlbertoSSj wrote: | Ho fatto un po di prove, ed ho visto che gcc la dichiarazione delle throw() la ignora completamente.
Invece a me servirebbe un controllo stretto, cioè se qualcosa mi può lanciare eccezioni io lo devo sapere ( devo mettere mani in un magma di codice per la tesi :'( ).
Adesso infatti mi capitano degli abort random, che non so dove andare a beccare :\
tnk |
Se ho capito tu vorresti fare come in java in cui se dichiari che un metodo possa lanciare eccezioni il metodo chiamante almeno deve fare un catch(...).
Da quello che so il c++, almeno standard ANSI, non prevede questo.
Per quanto riguarda gli abort: potresti compilare con opzioni di debug e poi con il debugger stesso fare una analisi di quello che e' successo usando il file core.
In genere per programmi multithread si fa cosi'...
Inoltre tieni presente che anche se usi try{} catch(){} i segmentation fault di funzioni in C non wrappate non vengono intercettati dal catch. |
|
Back to top |
|
|
comio Advocate
Joined: 03 Jul 2003 Posts: 2191 Location: Taranto
|
Posted: Sat May 07, 2005 4:45 pm Post subject: Re: [OT] C++, Gestire le eccezioni |
|
|
AlbertoSSj wrote: | Ho fatto un po di prove, ed ho visto che gcc la dichiarazione delle throw() la ignora completamente.
Invece a me servirebbe un controllo stretto, cioè se qualcosa mi può lanciare eccezioni io lo devo sapere ( devo mettere mani in un magma di codice per la tesi :'( ).
Adesso infatti mi capitano degli abort random, che non so dove andare a beccare :\
tnk |
sorry la feature non è in casa c++... _________________ RTFM!!!!
e
http://www.comio.it
|
|
Back to top |
|
|
AlbertoSSj Tux's lil' helper
Joined: 21 Nov 2004 Posts: 135
|
Posted: Sat May 07, 2005 5:52 pm Post subject: |
|
|
mmmm, ma allora vale veramente la pena usare le eccezioni? |
|
Back to top |
|
|
comio Advocate
Joined: 03 Jul 2003 Posts: 2191 Location: Taranto
|
Posted: Sat May 07, 2005 7:49 pm Post subject: |
|
|
AlbertoSSj wrote: | mmmm, ma allora vale veramente la pena usare le eccezioni? |
c'è gente che si pone questa domanda... poi hanno fatto java e c#.
ciao _________________ RTFM!!!!
e
http://www.comio.it
|
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Sat May 07, 2005 9:06 pm Post subject: |
|
|
AlbertoSSj wrote: | mmmm, ma allora vale veramente la pena usare le eccezioni? |
Premettendo che é da un bel pó che non tocco il C++ e del come gestisse le eccezioni non ho nessun ricordo, se ho letto bene quel che ti capita ti sarebbe piú comodo un debugger....
Come 2c da lanciare nella discussione potrei dire che tutti i costrutti servono e non servono, dipende da come vengono utilizzati. _________________ Ciao da me! |
|
Back to top |
|
|
AlbertoSSj Tux's lil' helper
Joined: 21 Nov 2004 Posts: 135
|
Posted: Sun May 08, 2005 7:04 am Post subject: |
|
|
Mha, preferisco usarle le eccezioni, solo che non riesco a capire l'utilità di dichiarare una funzione
inf foo() throw()
Cioè non ho proprio capito che cambia da
int bar throw( barexception )
Ps: C'è un debugger che fa vedere da dove sono state lanciate le eccezioni?
ho provato con gdb ma la where mi ha risposto questo
Code: | Program received signal SIGABRT, Aborted.
0xffffe410 in __kernel_vsyscall ()
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7df98d1 in raise () from /lib/libc.so.6
#2 0xb7dfb42b in abort () from /lib/libc.so.6
#3 0xbfffeaf0 in ?? ()
#4 0x00000000 in ?? ()
#5 0x00000020 in ?? ()
#6 0x00000000 in ?? ()
#7 0x00000000 in ?? ()
#8 0x00000000 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000000 in ?? ()
#11 0x00000000 in ?? ()
#12 0x00000000 in ?? ()
#13 0x00000000 in ?? ()
#14 0x00000000 in ?? ()
#15 0x00000000 in ?? ()
#16 0x00000000 in ?? ()
#17 0x00000000 in ?? ()
#18 0x00000000 in ?? ()
#19 0x00000000 in ?? ()
#20 0x00000000 in ?? ()
#21 0x00000000 in ?? ()
#22 0x00000000 in ?? ()
#23 0x00000000 in ?? ()
#24 0x00000000 in ?? ()
#25 0x00000000 in ?? ()
#26 0x00000000 in ?? ()
#27 0x00000000 in ?? ()
#28 0x00000000 in ?? ()
#29 0x00000000 in ?? ()
#30 0x00000000 in ?? ()
#31 0x00000000 in ?? ()
#32 0x00000000 in ?? ()
#33 0x00000000 in ?? ()
#34 0x00000000 in ?? ()
#35 0x00000000 in ?? ()
#36 0x00000000 in ?? ()
#37 0xbfffeb9c in ?? ()
#38 0x00000000 in ?? ()
#39 0x00000000 in ?? ()
#40 0x00000000 in ?? ()
#41 0x00000000 in ?? ()
#42 0x09844246 in ?? ()
#43 0xbfffec10 in ?? ()
#44 0xb8001d30 in ?? ()
#45 0xb7f45a5b in ?? () from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libstdc++.so.5
#46 0x00000000 in ?? ()
#47 0x0804e1cc in ?? ()
#48 0xb7f1de48 in ?? () from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libstdc++.so.5
#49 0xb8001d30 in ?? ()
#50 0x070fa387 in ?? ()
#51 0xbfffec30 in ?? ()
#52 0xb80014e0 in _r_debug ()
#53 0xbfffec24 in ?? ()
#54 0x00000000 in ?? ()
#55 0xbfffec28 in ?? ()
#56 0xbfffec2c in ?? ()
|
|
|
Back to top |
|
|
Danilo l33t
Joined: 05 Feb 2004 Posts: 747 Location: Italy
|
Posted: Sun May 08, 2005 6:23 pm Post subject: |
|
|
Sembra che non abbia compilato con le informazioni di debug.
int bar throw( barexception )
Cosa e' ? int bar?
se vuoi rilanciare usa
throw( barexception )
o altrimenti
throw(<classe barexception>(<i parametri di inizializzazione del costruttore di barexception>) ) |
|
Back to top |
|
|
mrfree Veteran
Joined: 15 Mar 2003 Posts: 1303 Location: Europe.Italy.Sulmona
|
Posted: Sun May 08, 2005 7:44 pm Post subject: |
|
|
AlbertoSSj wrote: | mmmm, ma allora vale veramente la pena usare le eccezioni? |
IMHO si... anche se C++, a differenza di Java, non usa le eccezioni verificate (se non ricordo male dovrebbe essere questo il nome di tale feature) attraverso un'oculata gestione delle eccezioni riesci ad ottenere una netta separazione della normale logica di programmazione dalla gestione degli errori creando codice in genere molto più manutenibile; non è questo uno degli scopi principali dell'introduzione delle eccezioni? _________________ Please EU, pimp my country!
ICE: /etc/init.d/iptables panic |
|
Back to top |
|
|
Opossum Tux's lil' helper
Joined: 21 Apr 2005 Posts: 104
|
Posted: Mon May 09, 2005 9:27 am Post subject: |
|
|
Fermo restando che il C++ non ti obbliga a gestire le eccezioni (al contrario di java) posso fare una domanda?
Perchè per compilare codice C++ usi gcc?
Quando lo faccio gcc si lamenta tantissimo, non sarebbe più opportuno compilarlo con g++? |
|
Back to top |
|
|
jikko Apprentice
Joined: 17 Nov 2004 Posts: 192 Location: Pioltello Milano Italy
|
Posted: Mon May 09, 2005 2:09 pm Post subject: |
|
|
scusate ma non un link a dei paremtri specifici di ? _________________ ...Bill nostro che non sei nei cieli e non capisci il perche', e questa cosa ti sta sull ca@@o da morire, dacci oggi il nostro chip quotidiano...
(Luciano Ligabue, baby e' un mondo super) |
|
Back to top |
|
|
AlterX l33t
Joined: 03 Apr 2004 Posts: 754 Location: rm -rf /*
|
Posted: Thu May 12, 2005 5:18 pm Post subject: Re: [OT] C++, Gestire le eccezioni |
|
|
AlbertoSSj wrote: | Ho fatto un po di prove, ed ho visto che gcc la dichiarazione delle throw() la ignora completamente.
Invece a me servirebbe un controllo stretto, cioè se qualcosa mi può lanciare eccezioni io lo devo sapere ( devo mettere mani in un magma di codice per la tesi :'( ).
Adesso infatti mi capitano degli abort random, che non so dove andare a beccare :\
tnk |
In che senso gcc le ignora?!?!?
Cmq usa g++ perchè il gcc, anche se compila C++, non gestisce automaticamente le operazioni specifiche del C++, che invece fa il g++.
Per quanto riquarda le dichiarazioni di funzioni con il throw() e throw(eccezione,...,...), significano rispettivamente che la prima non emette nessun tipo di eccezione, la seconda che emette solo quelle tra parentesi; se invece non viene messo nessun throw, la funzione può emettere qualsiasi eccezione.
Ciao |
|
Back to top |
|
|
|