//----------------------------------------------------------------------------------------------------------------------------------------------------- VOID Application::OnException(Exception& E) { Trace0Enter(""); StringBuilder Message; Message.AppendLine(TEXT("UNHANDLED EXCEPTION")); Message.AppendFormatLine(TEXT("Exception Type: %s::%s"), E.GetType()->Namespace(), E.GetType()->Name() ); Message.AppendFormatLine(TEXT("Description: %s"), E.Description().ConstStr() ); Message.AppendLine(TEXT("\nStack Trace:")); for( SIZE_T i=0; i<E.StackTrace().Length(); i++ ) { #if defined(UNICODE) if (E.StackTrace()[i].Symbol().SourceFile() != 0) Message.AppendFormatLine(TEXT("0x%p %S() at %S:%d"), E.StackTrace()[i].InstructionPtr(), E.StackTrace()[i].Symbol().Name(), E.StackTrace()[i].Symbol().SourceFile(), E.StackTrace()[i].Symbol().SourceLine() ); else Message.AppendFormatLine(TEXT("0x%p %S()"), E.StackTrace()[i].InstructionPtr(), E.StackTrace()[i].Symbol().Name() ); #else if (E.StackTrace()[i].Symbol().SourceFile() != 0) Message.AppendFormatLine(TEXT("0x%p %s()\r\n at %s:%d"), E.StackTrace()[i].InstructionPtr(), E.StackTrace()[i].Symbol().Name(), Path::Filename(E.StackTrace()[i].Symbol().SourceFile()).ConstStr(), E.StackTrace()[i].Symbol().SourceLine() ); else Message.AppendFormatLine(TEXT("0x%p %s()"), E.StackTrace()[i].InstructionPtr(), E.StackTrace()[i].Symbol().Name() ); #endif } Trace(TraceLevel::ERROR, this, Message.ToString() ); Debug::GenerateCoreDump(); }
RF_Type::Bool AppendLine() { StringBuilder builder; builder.AppendLine(); return builder.Length() == 0 && builder.Size() == 1 && builder.Capacity() >= 1 && builder.AsCString() != 0 && builder.AsCString()[0] == '\0'; }