Spec-Zone.ru › Haskell 9

Control.Exception.Backtrace

Авторские права (c) Университет Глазго 1994-2023
Лицензия см. libraries/base/LICENSE
Сопровождающие ghc-devs@haskell.org
Стабильность внутренняя
Переносимость непереносимый (расширения GHC)
Безопасный Haskell Нет
Язык Haskell2010

Содержание

  • Механизмы обратной трассировки
  • Сбор обратных трассировок

Описание

Этот модуль предоставляет тип Backtrace s, который служит общим представлением информации об обратной трассировке, которую можно, например, прикреплять к исключениям (с помощью механизма ExceptionContext). Эти обратные трассировки сохраняют полезный контекст о состоянии выполнения программы с помощью различных средств; мы называем эти средства *механизмами обратной трассировки*.

В настоящее время поддерживаются четыре механизма обратной трассировки:

  • CostCentreBacktrace фиксирует текущий стек центров затрат с помощью getCurrentCCS.
  • HasCallStackBacktrace фиксирует HasCallStack CallStack.
  • ExecutionBacktrace фиксирует стек выполнения, раскручивает его и разрешает символы с помощью отладочной информации DWARF.
  • IPEBacktrace фиксирует стек выполнения и разрешает имена с помощью информации о происхождении таблиц информации.

Каждый из этих механизмов полезен в разных ситуациях. Хотя CostCentreBacktrace легко сопоставить с исходной программой, для них требуется инструментировать программу центрами затрат, что влечёт за собой затраты во время выполнения. Аналогично, для HasCallStackBacktrace требуется вручную аннотировать программу ограничениями HasCallStack.

В отличие от них, IPEBacktrace не требуют инструментирования во время выполнения, но для этого необходимо, чтобы программа (или хотя бы её часть) была собрана с флагом GHC -finfo-table-map. Кроме того, поскольку информация о происхождении таблиц информации формируется после оптимизации, её может быть сложнее связать со структурой исходной программы.

ExecutionBacktrace похожи на IPEBacktrace, но используют раскрутку стека и разрешение символов DWARF; благодаря этому можно получать полезные обратные трассировки даже при наличии внешних вызовов как из Haskell, так и в Haskell. Однако для надёжной раскрутки стека всю программу (и её зависимости, как на Haskell, так и на нативном коде) необходимо компилировать с отладочной информацией (например, используя флаг GHC -g).

Механизмы обратной трассировки

data BacktraceMechanism Источник

Как собирать обратную трассировку при возникновении исключения.

Конструкторы

CostCentreBacktrace

собирать обратные трассировки стека центров затрат (доступно только при сборке с профилированием)

HasCallStackBacktrace

собирать обратные трассировки HasCallStack

ExecutionBacktrace

собирать обратные трассировки путём нативной раскрутки стека выполнения (например, с помощью отладочной информации DWARF)

IPEBacktrace

собирать обратные трассировки из записей о происхождении таблиц информации

getBacktraceMechanismState :: BacktraceMechanism -> IO Bool Источник

Будет ли указанный BacktraceMechanism использоваться при сборе обратных трассировок?

setBacktraceMechanismState :: BacktraceMechanism -> Bool -> IO () Источник

Задать, будет ли указанный BacktraceMechanism использоваться при сборе обратных трассировок?

Сбор обратных трассировок

data Backtraces Источник

Набор обратных трассировок.

Экземпляры
Подробная информация об экземплярах
ExceptionAnnotation Backtraces Источник
Подробная информация об экземпляре

Определено в GHC.Internal.Exception.Backtrace

Методы

displayExceptionAnnotation :: Backtraces -> String Источник

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API