Spec-Zone.ru › Haskell 7

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

Явно создаётся с помощью неявных параметров

data CallStack Источник

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

Примеры использования

Eq CallStack
Show CallStack

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

Spec-Zone.ru

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