2010-08-05 11 views
7

Jeśli uruchomię plik wykonywalny, który zgłasza wyjątek (wbudowany w debugowanie), pojawi się okno dialogowe z komunikatem o błędzie z informacją "Awaria debugowania nie powiodła się", a następnie informacje o wyjątku. W takim przypadku wykonanie programu jest zawieszone, dopóki nie wybiorę opcji "Przerwij", "Ponów" lub "Ignoruj".Jak mogę wyłączyć dialogi wyjątków "Microsoft Visual C++ Debug Library"?

Chodzi o to, że uruchamiam wiele aplikacji ze skryptu, a jeśli któryś z nich zgłasza wyjątek, przerywa mój skrypt, dopóki nie zostanie obsłużony.

Czy jest jakiś sposób wyłączenia tego mechanizmu obsługi wyjątków?

EDYCJA: Pamiętam, że jakiś czas temu czytałem o kluczu rejestru, który wyłączałby wyświetlanie komunikatów o błędach. Czy ktoś o tym wie?

Odpowiedz

1

Czy możesz skompilować swoje pliki wykonywalne jako wersję? Przypominam, że powinno to powstrzymać pojawianie się błędów potwierdzenia.

+0

Choć są moje wnioski, nie mogę budować ich uwalnianie. – Geo

+0

@Geo: Jeśli nie możesz zmodyfikować samej aplikacji, jedną z opcji jest napisanie małego programu, który okresowo sprawdza obecność tego okna i wysyła do niego kluczowy obrys "I". Robię to sam tak i to bardzo pomaga. – Naveen

+0

Czy nie istnieje klucz rejestru, który możemy zmodyfikować, aby osiągnąć podobny efekt? – Geo

4

Jeśli można zmodyfikować źródło wniosku (ów), przyjrzeć się funkcji _CrtSetReportMode, np

_CrtSetReportMode(_CRT_ASSERT, 0); 

Zobacz msdn więcej.

2

Jeśli można zmodyfikować źródło, należy przerwać zachowanie (wywoływane przez assert), aby wyłączyć okno dialogowe przerwania/ponowienia/zignorowania.

Po przerwaniu, crashdump będzie nadal produkowany (domyślnie), więc nie stracisz tego, co ważne.

Dodatkowo można dostosować zachowanie assert, aby pisać tylko na stderr. NIE jest to wymagane, jeśli zachowanie przerwania jest adekwatne do tego, co chcesz. Uwaga: wywołania _Crtxxx są aktywne tylko w kompilacjach debugowania (/ Zi).

Minimalna zmiana, aby wyłączyć przerywanie/ponawianie/ignorowanie. Odkomentuj wywołania _Crt i dołącz crtdbg.h, aby również zmodyfikować zachowanie assert w kompilacjach trybu debugowania.

#include <stdlib.h> 
//#include <crtdbg.h> 
int main(int argc,char **argv); 
int main(int argc,char **argv) 
{ 
    // ON assert, write to stderr. 
    //_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); 
    //_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 

    // Suppress the abort message 
    _set_abort_behavior(0, _WRITE_ABORT_MSG); 

    abort(); 
    return 0; 
} 

msdn assert mode

Powiązane problemy