dumpTrace static method

void dumpTrace(
  1. StackTrace stackTrace, {
  2. String? title,
  3. bool alwaysPrint = false,
})

Dumps a stack trace in a human-readable format with minimal emojis.

Parses the stack trace and displays it with clickable file paths to make debugging easier and more efficient.

Implementation

static void dumpTrace(
  StackTrace stackTrace, {
  String? title,
  bool alwaysPrint = false,
}) {
  if (!_canLog(alwaysPrint)) return;

  final traceTitle = title ?? 'JET STACK TRACE';
  _log('╔╣ $traceTitle ╠══');
  _log('╠══════════════');

  final lines = stackTrace.toString().split('\n');
  int frameNumber = 1;

  for (final line in lines) {
    if (line.trim().isEmpty) continue;

    // Parse stack trace line
    final parsedFrame = _parseStackTraceLine(line.trim());
    if (parsedFrame != null) {
      // Extract file name from full path
      final fileName = _extractFileName(parsedFrame['file']);

      // Create clickable file path
      final fileUrl = _formatClickableFilePath(
        parsedFrame['file'],
        parsedFrame['line'],
        parsedFrame['column'],
      );

      // Display frame in the requested format
      _log('╠╣ [ $frameNumber ] -> ${parsedFrame['method']} ╠══');
      _log(
        '╠ LINE [${parsedFrame['line'] ?? 'N/A'}] COLUMN [${parsedFrame['column'] ?? 'N/A'}]',
      );
      _log('╠ At ${fileName ?? 'unknown'}');
      _log('╠ "${fileUrl ?? 'N/A'}"');
      _log('╚════════════════════════');

      frameNumber++;
    } else {
      // If we can't parse it, show it as raw
      _log('╠╣ [ $frameNumber ] -> Unparsed Frame ╠══');
      _log('╠ $line');
      _log('╚════════════════════════');
      frameNumber++;
    }
  }

  _log('');
}