GHC.Stack
| Авторские права | (c) Университет Глазго 2011 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | ghc-devs@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
Доступ к моделированию стека вызовов GHC
С момента выпуска: base-4.5.0.0
errorWithStackTrace :: Строка -> a Исходный код
Устаревшее: error добавляет стек вызовов сейчас
Подобно функции error, но добавляет в сообщение об ошибке трассировку стека, если она доступна.
С момента выпуска: base-4.7.0.0
Профилирование стеков вызовов
currentCallStack :: IO [Строка] Исходный код
Возвращает [String] представление текущего стека вызовов. Это может быть полезно для отладки.
Реализация использует моделирование стека вызовов, поддерживаемое профайлером, поэтому она работает только в том случае, если программа была скомпилирована с -prof и содержит соответствующие аннотации SCC (например, с использованием -fprof-auto). В противном случае список, возвращаемый, вероятно, будет пустым или неинформативным.
С момента выпуска: base-4.5.0.0
whoCreated :: a -> IO [Строка] Исходный код
Получить трассировку стека, прикрепленную к объекту.
С момента выпуска: 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 в три шага:
- Если в области видимости находится
CallStack(то есть у окружающей функции есть ограничениеHasCallStack), GHC добавит новую точку вызова к существующемуCallStack. - Если в области видимости нет
CallStack(например, в сессии GHCi выше), и у окружающего определения нет явного типа подписи, GHC выведет ограничениеHasCallStackдля окружающего определения (с учетом ограничения мономорфизма). - Если в области видимости нет
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' только для не-замороженных С момента выпуска: base-4.9.0.0 |
||||
Определено в GHC.Internal.IsList Связанные типы
| |||||
| Show CallStack Исходный код | С момента выпуска: base-4.9.0.0 |
||||
Определено в GHC.Internal.Show МетодыshowsPrec :: Целое -> CallStack -> ShowS Исходный код show :: CallStack -> Строка Исходный код showList :: [CallStack] -> ShowS Исходный код | |||||
| type Элемент CallStack Исходный код | |||||
Определено в GHC.Internal.IsList | |||||
type HasCallStack = ?callStack :: CallStack Source
Запросите CallStack.
ПРИМЕЧАНИЕ: Неявный параметр ?callStack :: CallStack — это деталь реализации, и его не следует считать частью API CallStack, мы можем изменить реализацию в будущем.
С тех пор как: base-4.9.0.0
callStack :: HasCallStack => CallStack Source
Возвращает текущий CallStack.
Не включает место вызова callStack.
С тех пор как: base-4.9.0.0
emptyCallStack :: CallStack Source
Пустой CallStack.
С тех пор как: base-4.9.0.0
freezeCallStack :: CallStack -> CallStack Source
Заморозить стек вызовов, предотвратив добавление новых мест вызовов.
pushCallStack callSite (freezeCallStack callStack) = freezeCallStack callStack
С тех пор как: base-4.9.0.0
fromCallSiteList :: [([Char], SrcLoc)] -> CallStack Source
Преобразовать список мест вызовов в CallStack.
С тех пор как: base-4.9.0.0
getCallStack :: CallStack -> [([Char], SrcLoc)] Source
Извлечь список мест вызовов из CallStack.
Список упорядочен по последнему вызову.
С тех пор как: base-4.8.1.0
popCallStack :: CallStack -> CallStack Source
Удалить самое последнее место вызова из стека CallStack.
Эта функция, как и pushCallStack, не оказывает влияния на замороженный CallStack.
С тех пор как: base-4.9.0.0
prettyCallStack :: CallStack -> String Source
Красиво вывести CallStack.
С тех пор как: ghc-internal-4.9.0.0
pushCallStack :: ([Char], SrcLoc) -> CallStack -> CallStack Source
Добавить место вызова в стек.
Эта функция не оказывает влияния на замороженный CallStack.
С тех пор как: base-4.9.0.0
withFrozenCallStack :: HasCallStack => (HasCallStack => a) -> a Source
Выполнить вычисление без добавления новых записей в CallStack.
С тех пор как: base-4.9.0.0
Местоположения исходного кода
Единственное местоположение в исходном коде.
С тех пор как: base-4.8.1.0
Конструкторы
| SrcLoc | |
Поля
| |
Примеры
Определено в 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 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocStartCol") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "srcLocEndLine") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocEndCol") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int))))) |
prettySrcLoc :: SrcLoc -> String Источник
Красивый вывод SrcLoc.
С: ghc-internal-4.9.0.0
Внутреннее
data CostCentreStack Источник
Стек центров затрат из профайлера центров затрат GHC.
data CostCentre Источник
Центр затрат из профайлера центров затрат GHC.
getCurrentCCS :: dummy -> IO (Указатель CostCentreStack) Источник
Возвращает текущий CostCentreStack (значение nullPtr, если текущая программа не была скомпилирована с поддержкой профилирования). Принимает аргумент dummy, который можно использовать для предотвращения вызова getCurrentCCS из-за упрощения, что привело бы к неинформативному стеку (CAF).
getCCSOf :: a -> IO (Указатель CostCentreStack) Источник
Получить CostCentreStack, связанный с заданным значением.
clearCCS :: IO a -> IO a Источник
Выполнить вычисление со стеком центров затрат пустого значения. Например, это используется интерпретатором для выполнения интерпретируемого вычисления без показа стека вызовов, что он был вызван из GHC.
ccsCC :: Указатель CostCentreStack -> IO (Указатель CostCentre) Источник
Получить CostCentre в начале CostCentreStack.
ccsParent :: Указатель CostCentreStack -> IO (Указатель CostCentreStack) Источник
Получить хвост CostCentreStack.
ccLabel :: Указатель CostCentre -> IO CString Источник
Получить метку CostCentre.
ccModule :: Указатель CostCentre -> IO CString Источник
Получить модуль CostCentre.
ccSrcSpan :: Указатель CostCentre -> IO CString Источник
Получить область исходного кода CostCentre.
ccsToStrings :: Указатель CostCentreStack -> IO [String] Источник
Форматировать 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/9.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-Stack.html