Spec-Zone.ru › Haskell 7

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

Spec-Zone.ru

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