GHC.Стек
| Авторские права | (c) Университет Глазго 2011 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | cvs-ghc@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Содержание
Описание
Доступ к эмуляции стека вызовов GHC
С момента выпуска: 4.5.0.0
Стек вызовов
Эмулируется системой времени выполнения
currentCallStack :: IO [String] Источник
возвращает '[String]', представляющий текущий стек вызовов. Это может быть полезно для отладки.
Реализация использует эмуляцию стека вызовов, поддерживаемую профилировщиком, поэтому она работает только в том случае, если программа была скомпилирована с -prof и содержит подходящие аннотации SCC (например, с помощью -fprof-auto). В противном случае возвращаемый список, скорее всего, будет пустым или неинформативным.
С момента выпуска: 4.5.0.0
whoCreated :: a -> IO [String] Источник
Получение стека вызовов, прикреплённого к объекту.
С момента выпуска: 4.5.0.0
errorWithStackTrace :: String -> a Источник
Аналогично функции error, но добавляет в сообщение об ошибке стек вызовов, если он доступен.
С момента выпуска: 4.7.0.0
Явно создаётся с помощью неявных параметров
CallStack — это альтернативный способ получения стека вызовов в заданной точке программы.
Когда в программе встречается неявный параметр типа CallStack, GHC будет решать его с текущей локацией. Если в области видимости имеется другой CallStack неявный параметр (например, в качестве аргумента функции), новая локализация будет добавлена к существующей, создавая явный стек вызовов. Например,
myerror :: (?loc :: CallStack) => String -> a myerror msg = error (msg ++ "n" ++ showCallStack ?loc)
ghci> myerror "die" *** Исключение: die ?loc, вызван в MyError.hs:7:51 в main:MyError myerror, вызван в interactive:2:1 в interactive:Ghci1
CallStack не взаимодействуют с системой времени выполнения и не требуют компиляции с -prof. С другой стороны, поскольку они явно строятся с использованием неявных параметров, они, как правило, не содержат столько информации, как эмулируемые стеки вызовов, поддерживаемые системой времени выполнения.
Тип CallStack является абстрактным, но его можно преобразовать в [(String, SrcLoc)] с помощью getCallStack. String — это имя вызываемой функции, SrcLoc — место вызова. Список упорядочен по времени последнего вызова (первый элемент — последний).
С момента выпуска: 4.9.0.0
getCallStack :: CallStack -> [(String, SrcLoc)] Источник
showCallStack :: CallStack -> String Источник
Внутреннее устройство
data CostCentreStack Источник
data CostCentre Источник
getCurrentCCS :: dummy -> IO (Ptr CostCentreStack) Источник
getCCSOf :: a -> IO (Ptr CostCentreStack) Источник
ccsCC :: Ptr CostCentreStack -> IO (Ptr CostCentre) Источник
ccsParent :: Ptr CostCentreStack -> IO (Ptr CostCentreStack) Источник
ccLabel :: Ptr CostCentre -> IO CString Источник
ccModule :: Ptr CostCentre -> IO CString Источник
ccSrcSpan :: Ptr CostCentre -> IO CString Источник
ccsToStrings :: Ptr CostCentreStack -> IO [String] Источник
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/7.10.3/docs/html/libraries/base-4.8.2.0/GHC-Stack.html