Example #1
0
//-----------------------------------------------------------------------------------------------------------------------------------------------------
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';
 }