Отладчик

Отладчик - Сообщения

#1 Опубликовано: 24.11.2010 03:31:30
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Последняя редакция плагина: debug_20101127.7z


Могу попробовать через дополнение mcadefi приделать свой старый отладчик: Отладчик для программ Mathcad.

Будет работать, но с большими ограничениями. Можно будет передавать в отладчик только вектор чисел (произвольным размером).
Россия навсегда! Вячеслав Мезенцев
#2 Опубликовано: 24.11.2010 05:40:00
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Звучит заманчиво! Правда я не совсем понимаю как это возможно... Если потребуются какие-нибудь изменения в коде самой SMath Studio - скажите, постараюсь сразу их сделать, а изменённые модули передать Вам.
#3 Опубликовано: 24.11.2010 05:44:06
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Нет, изменений не потребуется. Он написан как независимое приложение и работает в "неуправляемом пространстве". Я просто давно уже им не занимался. Это, конечно, будет не полноценный отладчик, а только для численных расчётов. Работает очень просто. Мне нужно только его немного изменить, т.к. он привязывался к окну маткада.
Россия навсегда! Вячеслав Мезенцев
#4 Опубликовано: 24.11.2010 07:24:20
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Цитата

Правда я не совсем понимаю как это возможно...

Ну, это громко сказано: "отладчик". На самом деле это просто внешняя численная функция bp(), которая выполняется в отдельном потоке. Ещё рядом крутится интерфейс, который взаимодействует с этой функцией.
Отладка получается, когда вставляешь функцию bp() где-то в коде. Так отладчик перехватывает выполнение и тормозит вычисление функции, при этом переданные в функцию данные можно отображать в окне отладки. Всё просто. Надо только написать

К сожалению, с пол пинка запустить совместно не удалось. Проект скомпилировался в студии, но вот LoadLibrary() в mcadefi не отрабатывает. Библиотека не загружается. Придётся всё начинать сначала: создать новый тестовый проект и постепенно перекидывать файлы.

Настоящий отладчик следует писать сразу на C# и чтобы он работал в управляемом окружении, но, боюсь, меня на второй такой подвиг не хватит.
Россия навсегда! Вячеслав Мезенцев
#5 Опубликовано: 24.11.2010 09:55:42
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Удалось запустить интерфейс, но с ошибками рантайма. Пытается даже работать!


В отладчике три функции:

Дополнение обрабатывает следующие вхождения:
bp("матрица" - [debug.dll] [ Array ] Call breakpoint
echo("матрица" - [debug.dll] [ Array ] Send vars values
echofmt("матрица" - [debug.dll] [ Array ] Send vars values with format
Россия навсегда! Вячеслав Мезенцев
#6 Опубликовано: 24.11.2010 10:45:45
Samar

Samar

2 сообщений из 107 понравились пользователям.

Группа: User

Как я понял, отладка идет с помощью специальных функций, которые выводят информацию в отдельное окно?
www.math.by
#7 Опубликовано: 24.11.2010 11:41:01
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Да, в два окна. Одно для вывода лога в виде текста, а второе в виде таблицы, показывает переменные, заданные в функции bp().
Россия навсегда! Вячеслав Мезенцев
#8 Опубликовано: 24.11.2010 12:16:58
Samar

Samar

2 сообщений из 107 понравились пользователям.

Группа: User

Мне кажется, что данную вещь лучше всего встроить в саму программу.
www.math.by
#9 Опубликовано: 24.11.2010 12:54:04
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Конечно лучше, и к кому мне было обращаться, когда я хотел такую фичу в Маткаде? Они "встроили" свой вариант "отладки" в версии старше 11. Очень похожий на мой, только без интерфейсных заморочек. Они определили пару функций: trace(S, x, y, z, ...) и pause(S, x, y, z, ...) (мои аналоги: echo() и bp()) и на этом дело закончилось. Так до сих пор и существует. Ничего лучше пока не придумали.

С помощью своего отладчика мне удавалось писать более сложные программы. Поскольку я немного программирую, то мне хотелось иметь инструмент, который смахивает на то, к чему я привык а не жалкое окошко с примитивным тулбаром.

Человеческие средства отладки всегда были необходимы в маткаде. Вон взять Матлаб, там настоящий отладчик, профессиональный, бегает по исходнику m-файла тока-так. Не знаю как в новых версиях maple, но там с этим делом обстояло не лучше... полное извращение, чуть ли не ручное отлаживание. Сейчас не знаю, может придумали чего.

Так что к этому вопросу надо подходить по-серьёзному. Средства отладки - это порог областей применимости программ. Мой тутошний вариант - это просто протез на время.
Россия навсегда! Вячеслав Мезенцев
#10 Опубликовано: 26.11.2010 17:01:50
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Придётся с нуля пересобирать. Не могу от креша избавиться при выходе из программы. Отладчик написан с использованием MFC библиотеки. Я тогда её терпеть не мог и сейчас того же мнения... конечно, по сравнению с созданием рюшечек на голом Win32API это был прогресс, но с развитием визуального программирования MFC выглядит издевательством над программистом.
Функции, кстати, работают, но без интерфейса толку от них мало. Потом можно по аналогии сделать плагин на C#, он будет куда более функциональным, а уже потом отлаженные его части можно внедрить непосредственно в программу.
Россия навсегда! Вячеслав Мезенцев
#11 Опубликовано: 27.11.2010 10:51:38
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

ЭТО ПЛАГИН ВТОРОГО УРОВНЯ! Сначала должен быть установлен mcadefi плагин. Содержимое архива поместить в папку userefi!

Тестовая версия: debug_20101127.7z



Значится так, дорогие мои. Строго следуем инструкциям и не нажимаем на непонятные кнопки!

В отладчик включены 2 функции: echo() и bp(). Обе принимают вектор-столбец в качестве параметра. Элементы вектора должны быть только числами или переменными, которые содержать числа! И никак иначе.

echo() - выводит переменные в окно сообщений отладчика;
bp() - выводит значения переменных в окно переменных (табличку).

Когда вы запустите SMath Studio сразу покажется окно отладчика (это опционально, но пока не работает, т.е. можно сделать, чтобы окно было невидимым). Настройте размеры окна под себя и нажмите кнопку с фотиком - это сохранение вида в файле настроек. При следующем запуске окно примет вид, какой был при последнем сохранении.

Далее пробуем команду вывода echo(). Пишем:
echo(stack(1;2;3;4;5;6;7))= и вычисляем это дело. Эта функция нужна для ведения лога вычислений. Имейте в виду, что в отладчике есть ограничение на размер лога и старые сообщения автоматически обрезаются, а новые добавляются в конец.

Далее пробуем команду bp(). Пишем тоже самое:
bp(stack(1;2;3;4;5;6;7))= и вычисляем. Всё как бы подвиснет. Выражение будет выделено зелёной рамкой, а в окне отладчика в списке переменных появятся введённые числа. Не бойтесь, процессор не грузится. В таком состоянии программа может находиться вечно. Заметьте, что на тулбаре нажата кнопка паузы "||". Теперь её отжимаем и нажимаем на кнопку продолжить ">". Всё работает. Если нажать на кнопку стоп, то вычисления остановятся.
Чтобы пересчитать документ нужно нажать кнопку с одной стрелкой "->" - это равносильно нажатию F9.

А вот, чтобы заставить эту функцию вычисляться в программном блоке... тут надо применять хитрости. Спросим Андрея почему функция не вычисляется в программном блоке?
Россия навсегда! Вячеслав Мезенцев
#12 Опубликовано: 27.11.2010 12:24:39
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Как использовать...
Россия навсегда! Вячеслав Мезенцев
#13 Опубликовано: 27.11.2010 21:21:00
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

Не ожидал настолько продвинутого дебаггера.
Думал будет что-то типа консоли и пары кнопок.
#14 Опубликовано: 28.11.2010 02:39:27
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Там заложено больше возможностей. Это MDI интерфейс и матрицы можно было просматривать в отдельных окнах, но здесь для этого мне придётся в mcadefi плагине реализовать недокументированные возможности маткада по вложенным структурам. Думаю, что это не имеет смысла, лучше написать отладчик как низкоуровневый плагин SMath, тогда там будет много возможностей, в т.ч. преобразовывание выражений в нём.

Это просто пример, как бы это выглядело и работало.
Россия навсегда! Вячеслав Мезенцев
#15 Опубликовано: 28.11.2010 02:58:00
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Кстати, шаблоны - это файлы буфера обмена (t1.clp - t6.clp). Можно скопировать любое выражение в буфер обмена, потом открыть его (clipbrd.exe) и сохранить содержимое в .clp файле (для NT) и подсунуть в папку userefi. Поддерживается только 6 шаблонов. При нажатии на кнопку выбранного шаблона он скопируется в буфер обмена, а потом автоматически вставится в документ.
Мне было лень каждый раз набирать bp(), а ещё в маткаде очень не просто было создать матрицу с одним элементом.
Россия навсегда! Вячеслав Мезенцев
#16 Опубликовано: 28.11.2010 06:50:25
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Залил в svn. Можете посмотреть как это выглядит. Начал писать года 4-5 назад. Плохо то, что я использовал сторонний компонент для отображения таблиц. Поэтому пришлось целый проект добавлять в зависимость. Все компилится, скачал, проверил.
Конфигурации: Debug и Release. Остальные не трогайте. Студия: 2008.
Код путанный, это было моё первое (как всегда) приложение под MFC. Я всегда брался за сложные вещи и с самого начала.

П.С. Правда могут пути не совпасть. Я забыл поменять на относительные пути либо добавление библиотек, либо поиск инклудов. Поправьте сами в настройках проекта.
Россия навсегда! Вячеслав Мезенцев
1 пользователям понравился этот пост
Mikka 28.11.2010 09:52:00
#17 Опубликовано: 28.11.2010 09:05:20
zhuk

zhuk

13 сообщений из 120 понравились пользователям.

Группа: User

из-за некого типа гражданской наружности Уни smath менее чем за неделю из достойного калькулятора превратился в ядрёнукачарышку!)))) мне нравится! спасибо!!!!
неофициальный справочник https://sites.google.com/site/mikkhalichlab/home jabber конференция smath@conference.jabber.ru
1 пользователям понравился этот пост
уни 28.11.2010 10:35:00
#18 Опубликовано: 28.11.2010 12:32:09
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Надо только признать, что это было бы не возможно без заложенных в SMath Studio возможностей. Можно, конечно, ещё maple приделать как плагин, но это может поиметь оборотную сторону как с Mathcad. Там народ и не подозревал, что пользуется maple'овским движком для символьных вычислений, а вот когда срок подошёл... маткадовцы взялись за голову, они не развивали свои кадры в этом направлении, да и движок сам использовали только на 2% имеющихся возможностей, что вообще говоря не есть показатель умственной развитости менеджеров, которые такую связь одобрили. Купили потом лицензию MuPAD, а он продался конкурентам... сейчас Маткад у разбитого корыта. Да ещё и, возможно, перестанет поддерживать UserEFI интерфейс. Они оставляют его только разве что по просьбе Валерия Фёдоровича и другим похожим владельцам ПО, основанном на этой устаревшей технологии. Причём взамен ничего не предлагая.

Вспоминается печальная судьба замечательной программки Derive, которую выкупил TI и благополучно похоронил... в своих калькуляторах.

Так что желательно поднапрячься товарищам девелоперам и явить миру что-нить достойное хотя бы части символьных возможностей Мэпла. Тут ответ, что всё в руках плагинописателей, не потянет, т.к. либо это математическая программа, либо просто интерфейс для плагинов и не более того. Фотошоп тоже менеджер плагинов, но многое умеет и сам.

Путь в общем-то не сложный. Ядро мэпла состоит из где-то 100 простых символьных операций, которые вообще даже имён не имеют, а вызываются по номеру. Всё остальное на них основано. Нужно взять какую-нить старую версию мэпла, где можно было посмотреть исходники символьных функций и попробовать портировать что-нить. Вот тогда появятся идеи что и как делать дальше. Может и типов каких добавить. Либо заглянуть в opensource проект какой и что-то взять оттуда. MuPAD очень похож по синтаксису с maple, но у него уже некая объектность появилась, как и у самого maple.
Россия навсегда! Вячеслав Мезенцев
  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений