2012-07-31 12 views
5

Powiel możliwe:
How to print message from caught exception?Skąd bierze się tekst z wyrzuconego wyjątku?

Przepraszam, czy to jest podstawowy lub powielane - Zrobiłem kilka wyszukiwań pierwszy, ale nie znaleźliśmy niczego, co odpowiedział na to.

Jeśli coś zrobić podstawowe takie jak:

throw exception("This thing didn't work"); 

Gdzie mogę zobaczyć? Ciąg nie pojawia się w konsoli wyjściowej, w stosie ani w żadnym z plików .log powiązanych z projektem. Zastanawiam się, dlaczego wkładam sznurek, jeśli nigdzie go nie widać. Mogę oczywiście użyć śladu stosu, aby zobaczyć, gdzie wybuchł, ale tego rodzaju pokonuje cel wyjątków w pierwszej kolejności.

W Javie, gdy podaję ciąg znaków, zobaczę ten ciąg w wynikach gdzieś. Zastanawiam się tylko, czy możliwe jest odtworzenie tego zachowania w C++.

+1

Myślę, że widać, kiedy wyjątek zostanie złapany. Poza tym prawdopodobnie zrzutu awaryjnego? – nhahtdh

+1

Jesteś * chwytający wyjątek, prawda? –

+2

Technicznie nie jest prawidłowy. Używasz błędu w libbie MS (std :: exception nie ma konstruktora, który pobiera ciąg). Ale twój punkt jest ważny, jeśli zmienisz na 'std :: runtime_error (" To coś nie działa ")'. –

Odpowiedz

1

Musisz przechwycić wyjątek, aby zobaczyć ciąg znaków. To może być przydatne, aby mieć obsługi wyjątkiem ostateczności następująco:

int main(int argc, char **argv) 
{ 
    try { 
     ... 
    } 
    catch(const std::exception& e) { 
     std::cout << "Uncaught exception: " << e.what() << std::endl; 
    } 
} 

W aplikacji GUI można mieć oświadczenie catch w głównej pętli zdarzeń i wyświetla komunikat o błędzie w oknie komunikatu .

W aplikacji nie-GUI sterowanej zdarzeniami można również uzyskać instrukcję catch w głównej pętli zdarzeń i zapisać komunikat o błędzie w pliku dziennika.

Te metody sprawią, że zobaczysz wszystkie wyjątki. Oczywiście większość wyjątków powinna zostać przechwycona, zanim dotrą do twojego wyjątku w ostateczności.

+0

To jest prawdopodobnie to. Problem polega na tym, że niektóre awarie spowodowane są zapewnieniami w bibliotekach i wydaje się, że nie ma możliwości ich złapania, więc nawet ostateczna próba/złapanie nie łapie wszystkiego ... –

Powiązane problemy