Debug.Trace
| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Unsafe |
| Language | Haskell2010 |
Описание
Функции для отладки и мониторинга выполнения.
Они могут быть полезны для исследования ошибок или проблем производительности. Их не следует использовать в рабочем коде.
Отладка
Функции trace, traceShow и traceIO выводят сообщения в поток вывода. Они предназначены для отладки с использованием «printf», то есть для отслеживания потока выполнения и вывода интересных значений.
Все эти функции полностью вычисляют сообщение перед его выводом; поэтому, если сообщение не определено полностью, ни одна часть его не будет выведена.
Обычным потоком вывода является stderr. Для приложений с графическим интерфейсом пользователя в Windows (у которых нет stderr) вывод направляется в консоль отладки Windows. Некоторые реализации этих функций могут форматировать выводимую строку, чтобы указать, что вы ведете отладку.
trace :: String -> a -> a Источник
Функция trace выводит сообщение отладки, заданное в качестве первого аргумента, перед возвращением второго аргумента в качестве результата.
Например, эта функция возвращает значение f x, но сначала выводит сообщение.
trace ("calling f with x = " ++ show x) (f x)
Функция trace должна использоваться только для отладки или для мониторинга выполнения. Функция не является референциально прозрачной: её тип указывает, что это чистая функция, но она имеет побочный эффект вывода сообщения отладки.
traceId :: String -> String Источник
Как и trace, но возвращает сообщение вместо третьего значения.
С версии: 4.7.0.0
traceShow :: Show a => a -> b -> b Источник
Как trace, но использует show для преобразования аргумента в String. Это удобно для вывода значений интересных переменных или выражений внутри функции. Например, здесь мы выводим значения переменных x и z.
f x y =
traceShow (x, z) $ result
where
z = ...
...
traceShowId :: Show a => a -> a Источник
Как traceShow, но возвращает показанное значение вместо третьего значения.
С версии: 4.7.0.0
traceStack :: String -> a -> a Источник
как trace, но дополнительно выводит стек вызовов, если он доступен.
В текущей реализации GHC стек вызовов доступен только если программа была скомпилирована с -prof; в противном случае traceStack ведет себя точно так же, как trace. Элементы стека вызовов соответствуют аннотациям SCC, поэтому рекомендуется использовать -fprof-auto или -fprof-auto-calls для автоматического добавления аннотаций SCC.
С версии: 4.5.0.0
traceIO :: String -> IO () Источник
Функция traceIO выводит сообщение отладки из монады IO. Это последовательно выполняет вывод с другими действиями IO.
С версии: 4.5.0.0
traceM :: Monad m => String -> m () Источник
Как trace, но возвращает единицу в произвольной монаде. Позволяет удобно использовать do-нотацию. Обратите внимание, что применение trace не является действием в монаде, так как traceIO находится в монаде IO.
... = do x <- ... traceM $ "x: " ++ show x y <- ... traceM $ "y: " ++ show y
С версии: 4.7.0.0
traceShowM :: (Show a, Monad m) => a -> m () Источник
Как traceM, но использует show для преобразования аргумента в String.
... = do x <- ... traceMShow $ x y <- ... traceMShow $ x + y
С версии: 4.7.0.0
putTraceMsg :: String -> IO () Источник
Устарело: Используйте traceIO
Отладка с использованием журнала событий
Отладка с использованием журнала событий — это система профилирования производительности. Эти функции генерируют дополнительные события в журнале событий. В сочетании с инструментами профилирования журнала событий эти функции можно использовать для мониторинга выполнения и исследования проблем производительности.
В настоящее время только GHC предоставляет профилирование с использованием журнала событий, см. руководство пользователя GHC для получения подробной информации о его использовании. Эти функции существуют и для других реализаций Haskell, но события не генерируются. Обратите внимание, что строковое сообщение всегда вычисляется, независимо от того, доступно или включено ли профилирование.
traceEvent :: String -> a -> a Источник
Функция traceEvent ведет себя как trace, с той разницей, что сообщение выводится в журнал событий, если профилирование с использованием журнала событий доступно и включено во время выполнения.
Подходит для использования в чистом коде. В контексте IO используйте traceEventIO вместо этого.
Обратите внимание, что при использовании многопроцессорной среды выполнения GHC (SMP) возможно (но редко), что два процессора одновременно генерируют дублируемые события, если одновременно оценивается один и тот же thunk, который использует traceEvent.
С версии: 4.5.0.0
traceEventIO :: String -> IO () Источник
Функция traceEventIO выводит сообщение в журнал событий, если профилирование с использованием журнала событий доступно и включено во время выполнения.
По сравнению с traceEvent, traceEventIO последовательно выполняет событие по отношению к другим действиям IO.
С версии: 4.5.0.0
Маркеры фаз выполнения
При анализе профиля выполнения программы часто требуется отмечать определенные точки или фазы выполнения, чтобы визуально отобразить их в профиле.
traceMarker :: String -> a -> a Источник
Функция traceMarker выводит маркер в журнал событий, если профилирование с использованием журнала событий доступно и включено во время выполнения. String — это имя маркера. Имя используется в инструментах профилирования, чтобы помочь вам различать маркеры.
Функция подходит для использования в чистом коде. В контексте IO используйте traceMarkerIO вместо этого.
Обратите внимание, что при использовании многопроцессорной среды выполнения GHC (SMP) возможно (но редко), что два процессора одновременно генерируют дублируемые события, если одновременно оценивается один и тот же thunk, который использует traceMarker.
С версии: 4.7.0.0
traceMarkerIO :: String -> IO () Источник
Функция traceMarkerIO выводит маркер в журнал событий, если профилирование с использованием журнала событий доступно и включено во время выполнения.
По сравнению с traceMarker, traceMarkerIO последовательно выполняет событие по отношению к другим действиям IO.
С версии: 4.7.0.0
© 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/Debug-Trace.html