Функция Error.throwWithStackTrace
Функция Error.throwWithStackTrace выбрасывает
переданную ошибку, прикрепляя к ней заранее
подготовленную трассировку стека. В первый
параметр мы передаем ошибку, которую нужно
выбросить, во второй - объект трассировки
стека типа StackTrace. В отличие от
обычного оператора throw, данная функция
позволяет сохранить исходную трассировку стека,
что особенно полезно при повторном выбрасывании
или асинхронной обработке ошибок.
Синтаксис
Error.throwWithStackTrace(error, stackTrace)
Пример
Давайте выбросим ошибку с текущей трассировкой стека и перехватим её:
void main()
{
try {
Error.throwWithStackTrace(
'abcde',
StackTrace.current
);
} catch (e) {
print('Caught: $e');
}
}
Результат выполнения кода:
"Caught: abcde"
Пример
Давайте передадим заранее сохраненную трассировку стека при повторном выбрасывании ошибки:
void main()
{
StackTrace? savedTrace;
try {
throw 'abcde';
} catch (e, stackTrace) {
savedTrace = stackTrace;
}
try {
Error.throwWithStackTrace('12345', savedTrace!);
} catch (e, stackTrace) {
print('Caught: $e');
print(stackTrace.toString().isNotEmpty);
}
}
Результат выполнения кода:
"Caught: 12345"
"true"
Пример
Давайте выбросим объект ошибки ArgumentError
с сохраненной трассировкой стека:
void main()
{
StackTrace? savedTrace;
try {
throw ArgumentError('invalid value');
} catch (e, stackTrace) {
savedTrace = stackTrace;
}
try {
Error.throwWithStackTrace(
ArgumentError('value must be positive'),
savedTrace!
);
} catch (e) {
print(e);
}
}
Результат выполнения кода:
"Invalid argument(s): value must be positive"
Смотрите также
-
оператор
throw,
который выбрасывает исключение -
оператор
rethrow,
который повторно выбрасывает исключение -
класс
StackTrace,
который представляет трассировку стека -
свойство
stackTrace,
которое возвращает трассировку стека ошибки