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