Перерыв и продолжение в отладчике GHCi без использования контрольных точек
В традиционном императивном отладчике, таком как gdb
, можно выполнить выполнение программы с помощью SIGINT
, проверить состояние программы и в конечном итоге возобновить выполнение.
В то время как GHCi позволяет взломать выполнение программы в произвольной точке с помощью -fbreak-on-exception
, попытка возобновить выполнение с помощью :continue
приведет только к тому, что интерпретатор продолжит работу с обработчиком исключений и завершает работу программы,
> let main = findCureForCancer
> :set -fbreak-on-exception
> :trace main
[twiddle thumbs]
[why is this taking so long?]
[maybe something is wrong, I better see what it doing]
^CStopped at <exception thrown>
_exception :: e = GHC.Exception.SomeException
GHC.IO.Exception.UserInterrupt
> :hist
...
[ahh, looks like this will just take a bit longer]
> :continue
[program should keep running]
Возможно ли завершить выполнение и продолжить возобновление после того, как вы купили бит с отладчиком GHCi?
Ответы
Ответ 1
Я не эксперт GHC, но я чрезвычайно уверен, что ни стабильная GHC, ни нынешняя глава GHC не поддерживают это. В руководстве ничего не говорится об этом, и Ive sourcedived текущий HEAD, чтобы убедиться, что ничего не было недокументировано, прокомментировано или окружено #if FALSE
. (Если вас интересуют, команды, которые в настоящее время импиментируются GHCi, определены в /ghc/InteractiveUI.hs: 136.) Ничего не опубликовано в список рассылки об этом, по крайней мере с января 2013 года, и никто не зарегистрировал или не закрыл ошибку (см. соответствующий поиск трекера ошибок).
Похоже, что это была бы полезная функция - вы бы файл запроса функции?