Свойство stackTrace
Свойство stackTrace класса Error возвращает объект типа StackTrace, который содержит информацию о последовательности вызовов функций в момент создания ошибки. Это свойство доступно только для чтения. Оно позволяет отследить, где именно в коде произошла ошибка, и какие функции были вызваны до этого момента. Свойство stackTrace особенно полезно при отладке, так как показывает полный путь выполнения программы, приведший к исключительной ситуации.
Синтаксис
error.stackTrace
Пример
Давайте создадим ошибку и выведем ее трассировку стека:
void main()
{
try
{
throw Error();
}
catch (e)
{
print(e.stackTrace);
}
}
Результат выполнения кода (примерный вывод):
#0 main (file:///main.dart:5:11)
#1 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#2 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
Пример
Давайте сравним трассировку стека двух разных ошибок, возникших в разных функциях:
void firstFunction()
{
throw Error();
}
void secondFunction()
{
throw Error();
}
void main()
{
try
{
firstFunction();
}
catch (e)
{
print('First error:');
print(e.stackTrace);
}
try
{
secondFunction();
}
catch (e)
{
print('Second error:');
print(e.stackTrace);
}
}
Результат выполнения кода (примерный вывод):
First error:
#0 firstFunction (file:///main.dart:3:9)
#1 main (file:///main.dart:15:6)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
Second error:
#0 secondFunction (file:///main.dart:8:9)
#1 main (file:///main.dart:24:6)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
Пример
Давайте перехватим ошибку и сохраним ее трассировку стека в переменную для дальнейшего анализа:
void main()
{
String res = '';
try
{
throw Error();
}
catch (e)
{
res = e.stackTrace.toString();
}
print(res.isNotEmpty);
}
Результат выполнения кода:
true
Смотрите также
-
класс
Error,
который представляет базовый класс ошибок -
класс
StackTrace,
который представляет трассировку стека -
свойство
current,
которое возвращает текущую трассировку стека -
функция
throwWithStackTrace,
которая выбрасывает ошибку с указанной трассировкой