Control.Exception.Backtrace
| Авторские права | (c) Университет Глазго 1994-2023 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Сопровождающие | ghc-devs@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимый (расширения GHC) |
| Безопасный Haskell | Нет |
| Язык | Haskell2010 |
Описание
Этот модуль предоставляет тип Backtrace s, который служит общим представлением информации об обратной трассировке, которую можно, например, прикреплять к исключениям (с помощью механизма ExceptionContext). Эти обратные трассировки сохраняют полезный контекст о состоянии выполнения программы с помощью различных средств; мы называем эти средства *механизмами обратной трассировки*.
В настоящее время поддерживаются четыре механизма обратной трассировки:
-
CostCentreBacktraceфиксирует текущий стек центров затрат с помощьюgetCurrentCCS. -
HasCallStackBacktraceфиксируетHasCallStackCallStack. -
ExecutionBacktraceфиксирует стек выполнения, раскручивает его и разрешает символы с помощью отладочной информации DWARF. -
IPEBacktraceфиксирует стек выполнения и разрешает имена с помощью информации о происхождении таблиц информации.
Каждый из этих механизмов полезен в разных ситуациях. Хотя CostCentreBacktrace легко сопоставить с исходной программой, для них требуется инструментировать программу центрами затрат, что влечёт за собой затраты во время выполнения. Аналогично, для HasCallStackBacktrace требуется вручную аннотировать программу ограничениями HasCallStack.
В отличие от них, IPEBacktrace не требуют инструментирования во время выполнения, но для этого необходимо, чтобы программа (или хотя бы её часть) была собрана с флагом GHC -finfo-table-map. Кроме того, поскольку информация о происхождении таблиц информации формируется после оптимизации, её может быть сложнее связать со структурой исходной программы.
ExecutionBacktrace похожи на IPEBacktrace, но используют раскрутку стека и разрешение символов DWARF; благодаря этому можно получать полезные обратные трассировки даже при наличии внешних вызовов как из Haskell, так и в Haskell. Однако для надёжной раскрутки стека всю программу (и её зависимости, как на Haskell, так и на нативном коде) необходимо компилировать с отладочной информацией (например, используя флаг GHC -g).
Механизмы обратной трассировки
data BacktraceMechanism Источник
Как собирать обратную трассировку при возникновении исключения.
Конструкторы
| CostCentreBacktrace | собирать обратные трассировки стека центров затрат (доступно только при сборке с профилированием) |
| HasCallStackBacktrace | собирать обратные трассировки |
| ExecutionBacktrace | собирать обратные трассировки путём нативной раскрутки стека выполнения (например, с помощью отладочной информации DWARF) |
| IPEBacktrace | собирать обратные трассировки из записей о происхождении таблиц информации |
getBacktraceMechanismState :: BacktraceMechanism -> IO Bool Источник
Будет ли указанный BacktraceMechanism использоваться при сборе обратных трассировок?
setBacktraceMechanismState :: BacktraceMechanism -> Bool -> IO () Источник
Задать, будет ли указанный BacktraceMechanism использоваться при сборе обратных трассировок?
Сбор обратных трассировок
data Backtraces Источник
Набор обратных трассировок.
Экземпляры
| ExceptionAnnotation Backtraces Источник | |
Определено в GHC.Internal.Exception.Backtrace Методы | |
displayBacktraces :: Backtraces -> String Источник
Преобразовать набор обратных трассировок в строку, удобочитаемую для человека.
collectBacktraces :: (?callStack :: CallStack) => IO Backtraces Источник
Собрать набор Backtraces.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/Control-Exception-Backtrace.html