Spec-Zone.ru › Haskell 9

GHC.Stack

Авторские права (c) Университет Глазго, 2011
Лицензия см. libraries/base/LICENSE
Сопровождающие ghc-devs@haskell.org
Стабильность внутренний
Переносимость непереносимый (расширения GHC)
Безопасный Haskell Safe
Язык 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>:... in interactive:Ghci...

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.Internal.IsList

Ассоциированные типы

type Item CallStack
Подробности экземпляра

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

type Item CallStack = (String, SrcLoc)

Методы

fromList :: [Item CallStack] -> CallStack Исходный код

fromListN :: Int -> [Item CallStack] -> CallStack Исходный код

toList :: CallStack -> [Item CallStack] Исходный код

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

Начиная с: base-4.9.0.0

Подробности экземпляра

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

Методы

showsPrec :: Int -> CallStack -> ShowS Исходный код

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

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

type Item CallStack Исходный код
Подробности экземпляра

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

type Item 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 Исходный код

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

pushCallStack callSite (freezeCallStack callStack) = freezeCallStack callStack

Начиная с: base-4.9.0.0

fromCallSiteList :: [([Char], SrcLoc)] -> CallStack Исходный код

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

Начиная с: base-4.9.0.0

getCallStack :: CallStack -> [([Char], SrcLoc)] Исходный код

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

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

Начиная с: base-4.8.1.0

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

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

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

Начиная с: base-4.9.0.0

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

Красиво отформатировать CallStack.

Начиная с: ghc-internal-4.9.0.0

pushCallStack :: ([Char], SrcLoc) -> CallStack -> CallStack Исходный код

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

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

Начиная с: base-4.9.0.0

withFrozenCallStack :: HasCallStack => (HasCallStack => a) -> a Исходный код

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

Начиная с: base-4.9.0.0

Местоположения в исходном коде

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

Отдельное местоположение в исходном коде.

Начиная с: base-4.8.1.0

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

SrcLoc

Поля

  • srcLocPackage :: [Char]
  • srcLocModule :: [Char]
  • srcLocFile :: [Char]
  • srcLocStartLine :: !Int
  • srcLocStartCol :: !Int
  • srcLocEndLine :: !Int
  • srcLocEndCol :: !Int
Экземпляры
Подробности экземпляров
Eq SrcLoc Источник

С версии: base-4.9.0.0

Подробности экземпляра

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

Методы

(==) :: SrcLoc -> SrcLoc -> Bool Источник

(/=) :: SrcLoc -> SrcLoc -> Bool Источник

Generic SrcLoc Источник
Подробности экземпляра

Определён в GHC.Internal.Generics

Ассоциированные типы

type Rep SrcLoc

С версии: base-4.15.0.0

Подробности экземпляра

Определён в GHC.Internal.Generics

type Rep SrcLoc = D1 ('MetaData "SrcLoc" "GHC.Internal.Stack.Types" "ghc-internal" 'False) (C1 ('MetaCons "SrcLoc" 'PrefixI 'True) ((S1 ('MetaSel ('Just "srcLocPackage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]) :*: (S1 ('MetaSel ('Just "srcLocModule") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]) :*: S1 ('MetaSel ('Just "srcLocFile") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]))) :*: ((S1 ('MetaSel ('Just "srcLocStartLine") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocStartCol") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "srcLocEndLine") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocEndCol") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)))))

Методы

from :: SrcLoc -> Rep SrcLoc x Источник

to :: Rep SrcLoc x -> SrcLoc Источник

Show SrcLoc Источник

С версии: base-4.9.0.0

Подробности экземпляра

Определён в GHC.Internal.Show

Методы

showsPrec :: Int -> SrcLoc -> ShowS Источник

show :: SrcLoc -> String Источник

showList :: [SrcLoc] -> ShowS Источник

type Rep SrcLoc Источник

С версии: base-4.15.0.0

Подробности экземпляра

Определён в GHC.Internal.Generics

type Rep SrcLoc = D1 ('MetaData "SrcLoc" "GHC.Internal.Stack.Types" "ghc-internal" 'False) (C1 ('MetaCons "SrcLoc" 'PrefixI 'True) ((S1 ('MetaSel ('Just "srcLocPackage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]) :*: (S1 ('MetaSel ('Just "srcLocModule") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]) :*: S1 ('MetaSel ('Just "srcLocFile") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]))) :*: ((S1 ('MetaSel ('Just "srcLocStartLine") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocStartCol") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "srcLocEndLine") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocEndCol") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)))))

prettySrcLoc :: SrcLoc -> String Источник

Вывести в удобочитаемом формате SrcLoc.

С версии: ghc-internal-4.9.0.0

Внутренние компоненты

data CostCentreStack Источник

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

data CostCentre Источник

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

getCurrentCCS :: dummy -> IO (Ptr CostCentreStack) Источник

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

getCCSOf :: a -> IO (Ptr CostCentreStack) Источник

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

clearCCS :: IO a -> IO a Источник

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

ccsCC :: Ptr CostCentreStack -> IO (Ptr CostCentre) Источник

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

ccsParent :: Ptr CostCentreStack -> IO (Ptr CostCentreStack) Источник

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

ccLabel :: Ptr CostCentre -> IO CString Источник

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

ccModule :: Ptr CostCentre -> IO CString Источник

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

ccSrcSpan :: Ptr CostCentre -> IO CString Источник

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

ccsToStrings :: Ptr CostCentreStack -> IO [String] Источник

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

renderStack :: [String] -> String Источник

© 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/GHC-Stack.html

Spec-Zone.ru

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