CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - try catch (...)

try catch (...)

dział ogólny

try catch (...)

Nowy postprzez bdgieros » piątek, 25 maja 2012, 23:14

Witam Panowie ponownie, mam problem tym razem z try i catch.

KOD cpp:     UKRYJ  
        try
                {
                        IdPOP31->Connect ();
                }
                catch (...)
                {
                        return;
                }
 


ale jeśli wystąpi wyjątek to nie zostaje on przechwycony przez catch a idzie on dalej do project1.cpp i zostaje tam przetworzony. Nie rozumiem tego. Na builder5 nie było takiego problemu i ten kod działał prawidłowo, cokolwiek zostało wygenerowane przez IdPO31 to trafiało do mojego catch. Co robię nieprawidłowo?

edit: to nie przechodzi do project1.cpp, przeczytałem, aby ustawić, że debuger ma ignorować dany błąd i tak też zrobiłem, dzięki temu otrzymałem sterowanie do bloku catch (...) ale messagebox z błędem w tym przypadku "connection closed gracefully" i tak dalej się pokazuje
jest to istotne dla mojego projektu bo przez tego messageboxa zostaje przerwane działanie programu
Avatar użytkownika
bdgieros
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): czwartek, 24 maja 2012, 00:02
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder XE 2010
Gadu Gadu: 0
    Windows 7Firefox

Re: try catch (...)

Nowy postprzez Cyfrowy Baron » sobota, 26 maja 2012, 08:31

To działa! Zrobiłem dokładnie jak Ty i zaznaczyłem opcję ignorowania tego komunikatu! Nie wyskakują mi więc żadne komunikaty. Jeżeli mimo zignorowania tego komunikatu nadal masz ten błąd to sprawdź to bez debugowania (XE2) lub uruchom poza IDE, czyli nie w środowisku C++Builder lecz poza nim i wtedy zobaczysz, że nie masz tego komunikatu.

Gdybyś uzupełnił profil byłoby wiadomo w jakiś środowisku programujesz i jakiej wersji INDY używasz, wtedy może udałoby się ustalić przyczynę błędu, a tak to możemy sobie powróżyć z fusów... :)
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: try catch (...)

Nowy postprzez bdgieros » sobota, 26 maja 2012, 12:10

właśnie nie działa, mimo zrobienia release i odłączenia RTL i package, nadal wyskakuje ten błąd. Tu chodzi o sytuację, że źle wpiszesz hasło, w tym momencie dostaniesz wyjątek, że błąd autoryzacji i to jest dobrze. Źle jest, że mimo zignorowania przeze mnie tego komunikatu, program generuje kolejny wyjątek, którego tym razem nie mogę obsłużyć. Dziwną sprawą jest to, że ten wyjątek generowany jest w momencie opuszczenia funkcji przy returnie.
Korzystam z IdPOP3, IdSSLIOHandlerSocketOpenSSL, IdSocksInfo.

KOD cpp:     UKRYJ  
                try
                {
                        IdPOP31->Connect (); //tutaj się łączę i następuje wygenerowanie wyjątku i to jest ok o ile jest złe logowanie czy coś tam
                }
                catch (Exception &exception) //tu mam wyjątek i to jest ok
                {
                        return; //i tu następuje wygenerowanie kolejnego wyjątku tego "connection closed gracefully" co już nie jest miłe
                }
 
Avatar użytkownika
bdgieros
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): czwartek, 24 maja 2012, 00:02
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder XE 2010
Gadu Gadu: 0
    Windows 7Firefox

Re: try catch (...)

Nowy postprzez Cyfrowy Baron » sobota, 26 maja 2012, 13:25

return nie wyrzuca cię z bloku try catch lecz kończy działanie funkcji. Przyjrzyjmy się takiemu kodowi:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 try{
         IdPOP31->Connect();
        }
        catch (Exception &exception)
        {
         return;
        }

 ShowMessage("komunikat po try catch");
}


Jeżeli wystąpi wyjątek i dojdzie do wywołania funkcji return to komunikat o treści "komunikat po try catch" nie zostanie wywołany, gdyż tutaj return przerywa działanie zdarzenia Button1Click.



Nie wiem czy o to chodzi, ale ja nie otrzymuję żadnych komunikatów o błędach autoryzacji, nie otrzymuję żadnych komunikatów. Jeżeli u Ciebie to występuje to jest to prawdopodobnie jakiś błąd w bibliotekach INDY. Ja używam INDY w wersji 10.5.8.0.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości