👣 Отличный пример того, как anyhow делает ошибки в Rust понятнее.
Код на скриншоте показывает, что каждая функция добавляет свой контекст, и в итоге при падении мы видим полную цепочку причин, а не просто финальную ошибку.
Что происходит:
hello0 выбрасывает ошибку с текстом "!!!!!".
hello1 вызывает hello0 и добавляет свой контекст "world".
hello2 вызывает hello1 и добавляет контекст "hello".
main вызывает hello2 и при ошибке печатает весь стек причин.
Что такое цепочка причин:
Это последовательность контекстов, которые добавлялись на каждом уровне вызовов.
Благодаря этому видно не только то, что сломалось, но и где именно.
Каждый уровень в стеке — это подсказка:
какая функция работала,
какой контекст она добавила,
и что пошло не так в конечном итоге.
Вывод при запуске:
hello
Caused by:
0: world
1: !!!!!
Как это читать:
Сверху -контекст "hello".
Под ним - контекст другой функции "world".
А внизу - исходная причина ошибки "!!!!!".
Такой подход делает отладку проще:
видно весь маршрут ошибки — от места падения до верхнего уровня.
#rust #junior
Post #1143
5.12K

- 👍 28
- ❤ 8
- 🥰 3
- 😢 1