Obsługa błędów w CodeGear C++ Builder 2007

dział ogólny

Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Miroo_007 » wtorek, 17 lutego 2009, 08:22

Jak włączyć obsługę błędów za pomocą instrukcji try { } catch {} w kompilatorze CodeGear C++ Builder 2007. Wszystko się pozmieniało od czasu kiedy C++ Builder przeją CodeGear.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez techew » wtorek, 17 lutego 2009, 10:30

? Ja uzywam CodeGear C++ Builder 2007 i obsługę błędów dziala jak zawsze

Kod: Zaznacz cały
try
{
//kod
}
catch(exception1& e)
{
//kod
}
catch(...)
{
//kod
}


badz tez:
Kod: Zaznacz cały
try
{
//kod
}
__finally
{
  //kod
}


chodzi bez najmniejszych problemów.
Ostatnio edytowano czwartek, 19 lutego 2009, 09:50 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: ujęto kod w tagi (administrator)
Avatar użytkownika
techew
Bladawiec
Bladawiec
 
Posty: 40
Dołączył(a): piątek, 26 września 2008, 10:07
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Frani0 » wtorek, 17 lutego 2009, 22:39

no dokładnie ;) chodzi dobrze tyle że możesz mieć tak że builder wyłapuje wyjątek i wywala swój komunikat to w razie problemów uruchamiaj go poza builderem ;)
Avatar użytkownika
Frani0
Bladawiec
Bladawiec
 
Posty: 48
Dołączył(a): poniedziałek, 25 sierpnia 2008, 18:23
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez wargo » środa, 18 lutego 2009, 11:36

Skompilowanie razem z bibliotekami chyba wyłącza tą możliwość.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Miroo_007 » środa, 18 lutego 2009, 23:23

Kolejną możliwością jest wyłączenie sprawdzania tych wyjątków ale wywala mi inne błędy. Zgadzam się z wargo co do mało realnego uruchomienia programu poza środowiskiem Borland C++ Builder. Aktualnie tworzę sobie funkcje, które w pewnym stopniu zastępują korzystanie z try i catch ale jest to bardzo uciążliwe.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Witold » czwartek, 19 lutego 2009, 00:00

Miroo_007 napisał(a):Jak włączyć obsługę błędów za pomocą instrukcji try { } catch {} w kompilatorze CodeGear C++ Builder 2007.

Miroo_007 napisał(a):Kolejną możliwością jest wyłączenie sprawdzania tych wyjątków ale wywala mi inne błędy.


Mógłbyś dokładniej opisać o co ci chodzi?
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Miroo_007 » czwartek, 19 lutego 2009, 00:22

Miroo_007 napisał(a):Jak włączyć obsługę błędów za pomocą instrukcji try { } catch {} w kompilatorze CodeGear C++ Builder 2007.

Tworząc taki przykładowy kod:
Kod: Zaznacz cały
AnsiString tekst = "abc3212";
int liczba;
try {
    liczba = StrToInt(tekst);
}
catch (...) {
   liczba = 0;
}

Wywala mi błąd konwersji, czyli jakby tam w ogóle nie było instrukcji try i catch.
Miroo_007 napisał(a):Kolejną możliwością jest wyłączenie sprawdzania tych wyjątków ale wywala mi inne błędy.

Wyłączam taką opcję: Project->Option->C++ Compilation->Enable exceptions i powoduje mi nowe błędy. Eksperymentowałem też z innymi opcjami w tej kategorii (Enable exceptions) ale mi to nie dało.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Witold » czwartek, 19 lutego 2009, 00:59

Miroo_007 napisał(a):Wywala mi błąd konwersji, czyli jakby tam w ogóle nie było instrukcji try i catch.

U mnie (BCB 2006) przy tym wywaleniu błędu konwersji, pojawia się okienko, a w nim opcja: [ ]Ignore this exception type. Gdy ją zaznaczę, ten monit się już nie pokaże.
W tym okienku jest jeszcze przycisk [Help], tam reszta szczegółów.

Miroo_007 napisał(a):Wyłączam taką opcję: Project->Option->C++ Compilation->Enable exceptions i powoduje mi nowe błędy.

Czytałeś w helpie info dotyczące tej opcji ?
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Miroo_007 » czwartek, 19 lutego 2009, 09:31

Witold napisał(a):U mnie (BCB 2006) przy tym wywaleniu błędu konwersji, pojawia się okienko, a w nim opcja: [ ]Ignore this exception type.

Błąd nie wyskakuje podczas sprawdzania poprawności programu tylko gdy już on działa. Wyskakuje okienko typu MessageBox z informacja o nieprawidłowej konwersji i nie ma tam żadnej opcji [ ]Ignore this exception type
Witold napisał(a):Czytałeś w helpie info dotyczące tej opcji ?

Jeszcze nie czytałem - jak będę w domu to sprawdzę.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Cyfrowy Baron » czwartek, 19 lutego 2009, 10:40

Nie wiem czy dobrze rozumiem dyskusję?!

Jeżeli użyję tego kodu:

Kod: Zaznacz cały
AnsiString tekst = "abc3212";
int liczba;
try {
    liczba = StrToInt(tekst);
}
catch (...) {
   liczba = 0;
}


To po skompilowaniu i uruchomieniu IDE (nie program) zwróci mi komunikat błędu. Zaznaczam opcję '[ ]Ignore this exception type' i IDE od tej pory będzie ignorować ten rodzaj błędów konwersji we wszystkich projektach, gdyż ustawienie to dotyczy środowiska a nie programu.
Program nie zwraca wyjątku dla danego kodu, gdyż w przypadku błędu konwersji ma przypisać zmiennej liczba wartość 0, jeżeli chcesz zwrócić błąd to zrób to tak:

Kod: Zaznacz cały
  AnsiString tekst = "abc3212";
  int liczba;

  try
  {
    liczba = StrToInt(tekst);
  }
  catch(Exception &eError)
  {
    throw Exception("Przyczyna błędu: " + eError.Message);
  }
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4725
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Obsługa błędów w CodeGear C++ Builder 2007

Nowy postprzez Miroo_007 » czwartek, 19 lutego 2009, 16:36

Wszystko jest już OK. Po prostu szukałem rozwiązania w Opcjach kompilatora, a rozwiązanie miałem przed oczami :oops:
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana


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 1 gość

cron