RandomClear icon

How to convert call stack to text

RandomClear | PRO | 06/06/13 02:34:47 PM UTC | 0 ⭐ | 817 👁️ | Never ⏰ | []
Delphi |

2.79 KB

|

None

|

0 👍

/

0 👎

// See also: http://pastebin.com/36yMX1Mf - "how to get call stack for last exception"
// See also: http://pastebin.com/ACtr0r6S - "how to silently log exception"
// See also: http://pastebin.com/rdNbEwPH - "how to get call stack on demand"
 
// Case 0: use StackTrace property of exception object (Delphi 2009+)
 
except
  on E: Exception do
    Memo1.Lines.Text := E.StackTrace;
end;
 
// Case 1: use ToString method to convert call stack to single string with default formatting
 
var
  CallStack: TEurekaBaseStackList;
begin
  CallStack := ...;
  Memo1.Lines.Text := CallStack.ToString;
end;
 
 
// Case 2: use Assign method to convert call stack to TStrings object with default formatting
 
var
  CallStack: TEurekaBaseStackList;
begin
  CallStack := ...;
  Memo1.Lines.Assign(CallStack);
end;
 
 
// Case 3: use CallStackToString function
// (CallStackToString function allows you to override header and formatting)
 
var
  CallStack: TEurekaBaseStackList;
  Formatter: TCompactStackFormatter;
begin
  CallStack := ...;
 
  // Default formatting and header:
  Memo1.Lines.Text := CallStackToString(CallStack);
 
  // Custom header:
  Memo1.Lines.Text := CallStackToString(CallStack, 'Error Details:');
 
  // Custom formatting:
  Formatter := TCompactStackFormatter.Create;
  try
    // <- here you can customize Formatter (for example: alter captions for columns, etc.)
    Memo1.Lines.Text := CallStackToString(CallStack, '', Formatter);
  finally
    FreeAndNil(Formatter);
  end;
end;
 
 
// Case 4: use CallStackToStrings function
// (CallStackToStrings function allows you to override header and formatting)
 
var
  CallStack: TEurekaBaseStackList;
  Formatter: TCompactStackFormatter;
begin
  CallStack := ...;
 
  // Default formatting and header:
  CallStackToStrings(CallStack, Memo1.Lines);
 
  // Custom header:
  CallStackToStrings(CallStack, Memo1.Lines, 'Error Details:');
 
  // Custom formatting:
  Formatter := TCompactStackFormatter.Create;
  try
    // <- here you can customize Formatter (for example: alter captions for columns, etc.)
    CallStackToStrings(CallStack, Memo1.Lines, '', Formatter);
  finally
    FreeAndNil(Formatter);
  end;
end;
 
 
 
 
{
 
Available build-in formatters for call stack are:
- TEurekaStackFormatter - general formatter for EurekaLog-style call stack (i.e. fixed-width table with columns) - best to be used in text files
- TEurekaStackFormatterV6 - backward-compatibility formatter to produce call stack in EurekaLog V6 format (less columns)
- TSimpleStackFormatter - produces list-like view of call stack (no columns) suitable for variable-width fonts (best to be used in message boxes)
- TCompactStackFormatter - similar to TSimpleStackFormatter, but produces more compact output with less details (good for quick preview)
 
}

Comments