Spec-Zone.ru › Haskell 8

GHC.Stack

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

Содержание

  • Профилирование стеков вызовов
  • Стеки вызовов HasCallStack
  • Местоположения исходного кода
  • Внутренности

Описание

Доступ к моделированию стека вызовов GHC

С момента: base-4.5.0.0

errorWithStackTrace :: String -> a Исходный код

Устарело: error добавляет стек вызовов сейчас

Как функция error, но добавляет трассировку стека к сообщению об ошибке, если она доступна.

С момента: base-4.7.0.0

Профилирование стеков вызовов

currentCallStack :: IO [String] Исходный код

Возвращает [String], представляющий текущий стек вызовов. Это может быть полезно для отладки.

Реализация использует моделирование стека вызовов, поддерживаемое профилировщиком, поэтому она работает только если программа была скомпилирована с -prof и содержит соответствующие аннотации SCC (например, с помощью -fprof-auto). В противном случае, возвращаемый список, вероятно, будет пустым или неинформативным.

С момента: base-4.5.0.0

whoCreated :: a -> IO [String] Исходный код

Получить трассировку стека, прикрепленную к объекту.

С момента: base-4.5.0.0

Стеки вызовов HasCallStack

data CallStack Исходный код

CallStack — это лёгкий метод получения частичного стека вызовов в любой точке программы.

Функция может запросить своё место вызова с помощью ограничения HasCallStack. Например, мы можем определить

putStrLnWithCallStack :: HasCallStack => String -> IO ()

как вариант putStrLn, который получит своё место вызова и выведет его, а также строку, заданную в качестве аргумента. Мы можем получить доступ к стеку вызовов внутри putStrLnWithCallStack с помощью callStack.

putStrLnWithCallStack :: HasCallStack => String -> IO ()
putStrLnWithCallStack msg = do
  putStrLn msg
  putStrLn (prettyCallStack callStack)

Таким образом, если мы вызовем putStrLnWithCallStack, мы получим отформатированный стек вызовов вместе со своей строкой.

>>> putStrLnWithCallStack "hello"
hello
CallStack (from HasCallStack):
  putStrLnWithCallStack, called at <interactive>:2:1 in interactive:Ghci1

GHC решает ограничения HasCallStack в три шага:

  1. Если в области видимости есть CallStack — т.е. у окружающей функции есть ограничение HasCallStack — GHC добавит новое место вызова к существующему CallStack.
  2. Если в области видимости нет CallStack — например, в сессии GHCi выше — и у окружающего определения нет явного типа, GHC выведет ограничение HasCallStack для окружающего определения (с учётом ограничения мономорфизма).
  3. Если в области видимости нет CallStack и у окружающего определения есть явный тип, GHC решит ограничение HasCallStack для одиночного CallStack, содержащего только текущее место вызова.

CallStack не взаимодействуют с RTS и не требуют компиляции с -prof. С другой стороны, так как они явно создаются через ограничения HasCallStack, они обычно не содержат столько же информации, сколько моделируемые стеки вызовов, поддерживаемые RTS.

CallStack — это [(String, SrcLoc)]. String — это имя функции, которая была вызвана, а SrcLoc — место вызова. Список упорядочен по функции, которая была вызвана последней, в начале.

ПРИМЕЧАНИЕ: Внимательный пользователь может заметить, что HasCallStack — просто псевдоним неявного параметра ?callStack :: CallStack. Это деталь реализации и не следует рассматривать как часть API CallStack, мы можем изменить реализацию в будущем.

С момента: base-4.8.1.0

Примеры
Подробности примеров
IsList CallStack

Учитывайте, что 'fromList . toList = id' только для размороженных CallStack , так как toList удаляет информацию о заморозке.

С момента: base-4.9.0.0

Подробности примера

Определено в GHC.Exts

Связанные типы

type Элемент CallStack Исходный код

Методы

fromList :: [Элемент CallStack] -> CallStack Исходный код

fromListN :: Целое -> [Элемент CallStack] -> CallStack Исходный код

toList :: CallStack -> [Элемент CallStack] Исходный код

Show CallStack

С момента: base-4.9.0.0

Подробности примера

Определено в GHC.Show

Методы

showsPrec :: Целое -> CallStack -> ShowS Исходный код

show :: CallStack -> String Исходный код

showList :: [CallStack] -> ShowS Исходный код

type Элемент CallStack
Подробности примера

Определено в GHC.Exts

type Элемент CallStack = (String, SrcLoc)

type HasCallStack = ?callStack :: CallStack Исходный код

Запрос CallStack.

ПРИМЕЧАНИЕ: Неявный параметр ?callStack :: CallStack — деталь реализации и не следует рассматривать как часть API CallStack, мы можем изменить реализацию в будущем.

С момента: base-4.9.0.0

callStack :: HasCallStack => CallStack Исходный код

Возвращает текущий CallStack.

Не включает место вызова callStack.

С момента: base-4.9.0.0

emptyCallStack :: CallStack Исходный код

Пустой CallStack.

С момента: base-4.9.0.0

freezeCallStack :: CallStack -> CallStack Source

Заморозить стек вызовов, предотвращая добавление новых записей.

pushCallStack callSite (freezeCallStack callStack) = freezeCallStack callStack

Since: base-4.9.0.0

fromCallSiteList :: [([Char], SrcLoc)] -> CallStack Source

Преобразовать список мест вызовов в CallStack.

Since: base-4.9.0.0

getCallStack :: CallStack -> [([Char], SrcLoc)] Source

Извлечь список мест вызовов из стека CallStack.

Список упорядочен по последнему вызову.

Since: base-4.8.1.0

popCallStack :: CallStack -> CallStack Source

Удалить последнее место вызова из CallStack.

Эта функция, как и pushCallStack, не оказывает влияния на замороженный CallStack.

Since: base-4.9.0.0

prettyCallStack :: CallStack -> String Source

Красиво вывести CallStack.

Since: base-4.9.0.0

pushCallStack :: ([Char], SrcLoc) -> CallStack -> CallStack Source

Добавить место вызова в стек.

Эта функция не оказывает влияния на замороженный CallStack.

Since: base-4.9.0.0

withFrozenCallStack :: HasCallStack => (HasCallStack => a) -> a Source

Выполнить вычисление без добавления новых записей в CallStack.

Since: base-4.9.0.0

Расположения исходного кода

data SrcLoc Source

Одиночное расположение в исходном коде.

Since: base-4.8.1.0

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

SrcLoc

Поля

  • srcLocPackage :: [Char]
  • srcLocModule :: [Char]
  • srcLocFile :: [Char]
  • srcLocStartLine :: Int
  • srcLocStartCol :: Int
  • srcLocEndLine :: Int
  • srcLocEndCol :: Int
Примеры использования
Подробнее об примерах использования
Eq SrcLoc

Since: base-4.9.0.0

Подробнее

Определено в GHC.Stack.Types

Методы

(==) :: SrcLoc -> SrcLoc -> Bool Source

(/=) :: SrcLoc -> SrcLoc -> Bool Source

Show SrcLoc

Since: base-4.9.0.0

Подробнее

Определено в GHC.Show

Методы

showsPrec :: Int -> SrcLoc -> ShowS Source

show :: SrcLoc -> String Source

showList :: [SrcLoc] -> ShowS Source

prettySrcLoc :: SrcLoc -> String Source

Красиво вывести SrcLoc.

Since: base-4.9.0.0

Внутренности

data CostCentreStack Source

Стек центров затрат из профилировщика центров затрат GHC.

data CostCentre Source

Центр затрат из профилировщика центров затрат GHC.

getCurrentCCS :: dummy -> IO (Ptr CostCentreStack) Source

Возвращает текущий CostCentreStack (значение nullPtr если текущая программа не компилировалась с поддержкой профилирования). Принимает аргумент dummy, который может использоваться для предотвращения вызова getCurrentCCS, что приведет к неинформативному стеку (CAF).

getCCSOf :: a -> IO (Ptr CostCentreStack) Source

Получить CostCentreStack, связанный с данным значением.

clearCCS :: IO a -> IO a Source

Выполнить вычисление со пустым стеком центров затрат. Например, это используется интерпретатором для запуска интерпретируемого вычисления без показа стека вызовов, показывающего, что он был вызван из GHC.

ccsCC :: Ptr CostCentreStack -> IO (Ptr CostCentre) Source

Получить CostCentre в начале CostCentreStack.

ccsParent :: Ptr CostCentreStack -> IO (Ptr CostCentreStack) Source

Получить хвост CostCentreStack.

ccLabel :: Ptr CostCentre -> IO CString Source

Получить метку CostCentre.

ccModule :: Ptr CostCentre -> IO CString Source

Получить модуль CostCentre.

ccSrcSpan :: Ptr CostCentre -> IO CString Source

Получить исходный диапазон CostCentre.

ccsToStrings :: Ptr CostCentreStack -> IO [String] Source

Форматировать CostCentreStack в виде списка строк.

renderStack :: [String] -> String Source

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-Stack.html

Spec-Zone.ru

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