Strona 1 z 1

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

Nowy postNapisane: wtorek, 17 lutego 2009, 08:22
przez Miroo_007
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.

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

Nowy postNapisane: wtorek, 17 lutego 2009, 10:30
przez techew
? 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.

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

Nowy postNapisane: wtorek, 17 lutego 2009, 22:39
przez Frani0
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 ;)

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

Nowy postNapisane: środa, 18 lutego 2009, 11:36
przez wargo
Skompilowanie razem z bibliotekami chyba wyłącza tą możliwość.

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

Nowy postNapisane: środa, 18 lutego 2009, 23:23
przez Miroo_007
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.

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

Nowy postNapisane: czwartek, 19 lutego 2009, 00:00
przez Witold
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?

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

Nowy postNapisane: czwartek, 19 lutego 2009, 00:22
przez Miroo_007
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.

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

Nowy postNapisane: czwartek, 19 lutego 2009, 00:59
przez Witold
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 ?

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

Nowy postNapisane: czwartek, 19 lutego 2009, 09:31
przez Miroo_007
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ę.

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

Nowy postNapisane: czwartek, 19 lutego 2009, 10:40
przez Cyfrowy Baron
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);
  }

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

Nowy postNapisane: czwartek, 19 lutego 2009, 16:36
przez Miroo_007
Wszystko jest już OK. Po prostu szukałem rozwiązania w Opcjach kompilatora, a rozwiązanie miałem przed oczami :oops: