Wyłapywanie wyjątków do logowania w aplikacji C ++ CLI
Próbuję przechwycić wszystkie wyjątki w aplikacji C ++ / CLI, aby móc je rejestrować i rejestrować (w tym śledzenie stosu). Do tej pory mam jakiś kod, który wygląda obiecująco:
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
try
{
Application::Run(gcnew MainForm());
}
catch( System::Exception^ e )
{
String^ message = gcnew String("");
System::Exception^ exceptionRecursor = e;
message = "ERROR: Uncaught exception encountered!\n\n";
while( exceptionRecursor )
{
message += exceptionRecursor->Source+"\n\t";
message += exceptionRecursor->Message+"\n\t";
message += exceptionRecursor->StackTrace+"\n\n";
exceptionRecursor = exceptionRecursor->InnerException;
}
MessageBox::Show(message);
}
return 0;
}
... ale zamiast zrzucić okno dialogowe z moimi błędami w porządkowaniu, dostaję coś innego:
An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
Additional information: Exception has been thrown by the target of an invocation.
Czy to dlatego, żeRun
komenda próbuje w jakiś sposób uporać się z wyjątkiem? Czy muszę zajmować się sprawami w środkuMainForm
gdzieś? ... czy jest jakiś inny (lepszy) sposób na to.
Zapominając na chwilę o źródle błędu (jestem w połowie cyklu rozwojowego i wciąż debuguję), byłoby miło móc wyłapać te błędy i stworzyć zgrabny ślad śledzenia, który mógłby pozostać w kodzie aż do wdrożenia i daj nam znać, kiedy coś idzie nie tak. Ostatecznie zawinąłem raport o błędzie w coś, co może zgłosić przez Internet.