отладчики для функц. языков

Landstreicher

Какие существуют отладчики для функциональных языков? Под отладчиком понимается программа, способная:
1) ставить точки останова, в том числе условные, на функции или строки кода
2) наблюдать содержимое сложных структур данных, в том числе векторов, деревьев, хэштаблиц
3) при возникновении ошибки или исключения типа деления на 0, выхода за границы массива и падения в assert, показывать полный дамп стека, включая функцию, которая вызвала исключение
4) вычислять значение выражений, в том числе включая вызовы функций из программы
5) при наличии в языке переменных (по типу ref или mutable в OCaml):
ставить watchpoint на переменные и менять их значение
6*) (при работе с несколькими потоками) управлять потоками, ставить точки останова так, чтобы при попасть в них можно было из любого потока
Один такой знаю - Slime для Lisp (м.б. не все 100%, но основная функциональность есть --- работать в целом можно).
Пробовал ocamldebug - не умеет 2,3,4,5.
Еще кто-нибудь с чем-нибудь работал?
PS. Если знаете про хороший отладчик, но не для функциональных языков --- тоже напишите, может быть интересно.

Papazyan

Slime тут не причем. Лисп сам по себе такой, при любой ошибке вываливается в repl, откуда ты можешь сделать что угодно.

Landstreicher

Да, перепутал.
Я немного работал с SBCL и CLISP, и оба предоставляют некоторые, весьма юзабельные средства для отладки программ. IMHO такая вещь как REPL - это очень правильно, сильно упрощает и ускоряет разработку и отладку программ. Хотелось бы что-то аналогичное для других языков.
Честно говоря, ситуация c ocamldebug немного непонятная. На таких языках как SML, OCaml написана куча софта, причем весьма сложного софта. Неужели все авторы обходятся без нормальных отладчиков и используют костыли типа printf? IMHO должно же быть какое-то средство.

Ivan8209

> Неужели все авторы обходятся без нормальных отладчиков
Вообще говоря, можно обойтись тестированием. То есть, REPL.
По распечатке стека должно быть видно, что надо тестировать:
либо более глубокие уровни, либо вызывающие функции.
---
...Я работаю антинаучным аферистом...

Landstreicher

> По распечатке стека должно быть видно, что надо тестировать:
> либо более глубокие уровни, либо вызывающие функции.
Что делать, если отладчик не показывает стек в момент возникновения ошибки, как например ocamldebug?

Ivan8209

> Что делать, если отладчик не показывает стек в момент возникновения ошибки, как например ocamldebug?
Не использовать его?
А что он умеет, этот отладчик?
Хоть что-нибудь он печатает?
Вообще говоря, достаточно знать стек возвратов.
---
...Я работаю антинаучным аферистом...

Landstreicher

> Не использовать его?
Поиск в Google не нашел для OCaml каких-либо других отладчиков
> А что он умеет, этот отладчик?
Сложно сказать. Легче сказать, чего он не умеет. (См. первый пост, пункты 2,3,4,5).

Ivan8209

Я и говорю, что из приведённого нужно только часть "3,"
именно --- умение показывать стек вызовов и выбрасывать в REPL.
Может быть, это не отладчик?
То есть, это могут быть средства отладки ядра интерпретатора.
---
...Я работаю антинаучным аферистом...

Landstreicher

UP! Вопрос очень актуален!
Неужели из всего форума никто не прогал на OCaml или Haskell? Почему все молчат?

enochka1145

// Неужели из всего форума никто не прогал на OCaml или Haskell? Почему все молчат?


Наутро, еще до открытия давилонской баржи, в газете "Давилонские юморески" появилась статья, в которой объяснялись причины молчания Спрутса. В статье писалось, что Спрутс молчал, так как было смешно отвечать на какие-то нелепые, сумасбродные обвинения. Как мог господин Спрутс подрывать доверие к Обществу гигантских растений, в то время как никакого такого общества и на свете-то нет? -- спрашивалось в статье.

Papazyan

Я писал кое-чего. На Хаскелле отладчик - это существенная проблема, ввиду его ленивости. Что-то пытаются сделать, но пока без особого успеха. На ОКамл отладчик в смысле С/С++ был не так уж и нужен. Переменных нет, многие ошибки ловятся системой типов, так что printf было достаточно. Большинство ошибок и было типа, что функция, которая должна была что-то обрабатывать вернула тривиальное значение или возник exception, отсюда можно было сделать вывод, что функция неправильная и путем логических умозаключений найти ошибку. В отличии от С отлаживать можно сразу после написания функции, а поскольку сторонних эффектов нет, то функция после отладки уже работала на 95%.

tokuchu

Для Scheme есть отладчик, в комплекте с DrScheme идёт, вроде.

Ivan8209

Есть даже т.н. "Portable Scheme Debugger", но вопрос ставится про семейство ML.
Для семейства LISP отладчик --- дело обычное.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Имя или ник:
Комментарий: