Подтвердить что ты не робот

Перерыв и продолжение в отладчике 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?

4b9b3361

Ответ 1

Я не эксперт GHC, но я чрезвычайно уверен, что ни стабильная GHC, ни нынешняя глава GHC не поддерживают это. В руководстве ничего не говорится об этом, и Ive sourcedived текущий HEAD, чтобы убедиться, что ничего не было недокументировано, прокомментировано или окружено #if FALSE. (Если вас интересуют, команды, которые в настоящее время импиментируются GHCi, определены в /ghc/InteractiveUI.hs: 136.) Ничего не опубликовано в список рассылки об этом, по крайней мере с января 2013 года, и никто не зарегистрировал или не закрыл ошибку (см. соответствующий поиск трекера ошибок).

Похоже, что это была бы полезная функция - вы бы файл запроса функции?