GHC.Stack
| Авторские права | (c) Университет Глазго 2011 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | cvs-ghc@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Safe Haskell | Надёжная |
| Язык | Haskell2010 |
Описание
Доступ к моделированию стека вызовов 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 в три шага:
- Если в области видимости есть
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.Exts Связанные типыtype Элемент CallStack Исходный код | |
| Show CallStack | С момента: base-4.9.0.0 |
Определено в GHC.Show МетодыshowsPrec :: Целое -> CallStack -> ShowS Исходный код show :: CallStack -> String Исходный код showList :: [CallStack] -> ShowS Исходный код | |
| type Элемент CallStack | |
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
Расположения исходного кода
Одиночное расположение в исходном коде.
Since: base-4.8.1.0
Конструкторы
| SrcLoc | |
Поля
| |
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