Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Россия навсегда! Вячеслав Мезенцев
Статус: Administration
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Сказал «Спасибо»: 640 раз Поблагодарили: 262 раз в 102 постах
Звучит заманчиво! Правда я не совсем понимаю как это возможно... Если потребуются какие-нибудь изменения в коде самой SMath Studio - скажите, постараюсь сразу их сделать, а изменённые модули передать Вам.
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Нет, изменений не потребуется. Он написан как независимое приложение и работает в "неуправляемом пространстве". Я просто давно уже им не занимался. Это, конечно, будет не полноценный отладчик, а только для численных расчётов. Работает очень просто. Мне нужно только его немного изменить, т.к. он привязывался к окну маткада.
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Цитата: Правда я не совсем понимаю как это возможно...
Ну, это громко сказано: "отладчик". На самом деле это просто внешняя численная функция bp(), которая выполняется в отдельном потоке. Ещё рядом крутится интерфейс, который взаимодействует с этой функцией.
Отладка получается, когда вставляешь функцию bp() где-то в коде. Так отладчик перехватывает выполнение и тормозит вычисление функции, при этом переданные в функцию данные можно отображать в окне отладки. Всё просто. Надо только написать
К сожалению, с пол пинка запустить совместно не удалось. Проект скомпилировался в студии, но вот LoadLibrary() в mcadefi не отрабатывает. Библиотека не загружается. Придётся всё начинать сначала: создать новый тестовый проект и постепенно перекидывать файлы.
Настоящий отладчик следует писать сразу на C# и чтобы он работал в управляемом окружении, но, боюсь, меня на второй такой подвиг не хватит.
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Удалось запустить интерфейс, но с ошибками рантайма. Пытается даже работать!
В отладчике три функции:
Код:
Дополнение обрабатывает следующие вхождения:
bp("матрица") - [debug.dll] [ Array ] Call breakpoint
echo("матрица") - [debug.dll] [ Array ] Send vars values
echofmt("матрица") - [debug.dll] [ Array ] Send vars values with format
Россия навсегда! Вячеслав Мезенцев
Статус: Member
Группы: Registered
Зарегистрирован: 15.07.2008(UTC)
Сообщений: 102
Откуда: Брест
Сказал «Спасибо»: 8 раз Поблагодарили: 2 раз в 2 постах
Как я понял, отладка идет с помощью специальных функций, которые выводят информацию в отдельное окно?
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Да, в два окна. Одно для вывода лога в виде текста, а второе в виде таблицы, показывает переменные, заданные в функции bp().
Россия навсегда! Вячеслав Мезенцев
Статус: Member
Группы: Registered
Зарегистрирован: 15.07.2008(UTC)
Сообщений: 102
Откуда: Брест
Сказал «Спасибо»: 8 раз Поблагодарили: 2 раз в 2 постах
Мне кажется, что данную вещь лучше всего встроить в саму программу.
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Конечно лучше, и к кому мне было обращаться, когда я хотел такую фичу в Маткаде? Они "встроили" свой вариант "отладки" в версии старше 11. Очень похожий на мой, только без интерфейсных заморочек. Они определили пару функций: trace(S, x, y, z, ...) и pause(S, x, y, z, ...) (мои аналоги: echo() и bp()) и на этом дело закончилось. Так до сих пор и существует. Ничего лучше пока не придумали.
С помощью своего отладчика мне удавалось писать более сложные программы. Поскольку я немного программирую, то мне хотелось иметь инструмент, который смахивает на то, к чему я привык
а не жалкое окошко с примитивным тулбаром.
Человеческие средства отладки всегда были необходимы в маткаде. Вон взять Матлаб, там настоящий отладчик, профессиональный, бегает по исходнику m-файла тока-так. Не знаю как в новых версиях maple, но там с этим делом обстояло не лучше... полное извращение, чуть ли не ручное отлаживание. Сейчас не знаю, может придумали чего.
Так что к этому вопросу надо подходить по-серьёзному. Средства отладки - это порог областей применимости программ. Мой тутошний вариант - это просто протез на время.
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Придётся с нуля пересобирать. Не могу от креша избавиться при выходе из программы. Отладчик написан с использованием MFC библиотеки. Я тогда её терпеть не мог и сейчас того же мнения... конечно, по сравнению с созданием рюшечек на голом Win32API это был прогресс, но с развитием визуального программирования MFC выглядит издевательством над программистом. Функции, кстати, работают, но без интерфейса толку от них мало. Потом можно по аналогии сделать плагин на C#, он будет куда более функциональным, а уже потом отлаженные его части можно внедрить непосредственно в программу.
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
ЭТО ПЛАГИН ВТОРОГО УРОВНЯ! Сначала должен быть установлен 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.
А вот, чтобы заставить эту функцию вычисляться в программном блоке... тут надо применять хитрости. Спросим Андрея почему функция не вычисляется в программном блоке?
Отредактировано пользователем 27 ноября 2010 г. 18:09:54(UTC)
| Причина: Не указана
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Как использовать...
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Developers, Registered Зарегистрирован: 28.08.2009(UTC) Сообщений: 127
Сказал(а) «Спасибо»: 19 раз Поблагодарили: 4 раз в 4 постах
Не ожидал настолько продвинутого дебаггера. Думал будет что-то типа консоли и пары кнопок.
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Там заложено больше возможностей. Это MDI интерфейс и матрицы можно было просматривать в отдельных окнах, но здесь для этого мне придётся в mcadefi плагине реализовать недокументированные возможности маткада по вложенным структурам. Думаю, что это не имеет смысла, лучше написать отладчик как низкоуровневый плагин SMath, тогда там будет много возможностей, в т.ч. преобразовывание выражений в нём. Это просто пример, как бы это выглядело и работало.
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Кстати, шаблоны - это файлы буфера обмена (t1.clp - t6.clp). Можно скопировать любое выражение в буфер обмена, потом открыть его (clipbrd.exe) и сохранить содержимое в .clp файле (для NT) и подсунуть в папку userefi. Поддерживается только 6 шаблонов. При нажатии на кнопку выбранного шаблона он скопируется в буфер обмена, а потом автоматически вставится в документ. Мне было лень каждый раз набирать bp(), а ещё в маткаде очень не просто было создать матрицу с одним элементом.
Россия навсегда! Вячеслав Мезенцев
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Залил в svn. Можете посмотреть как это выглядит. Начал писать года 4-5 назад. Плохо то, что я использовал сторонний компонент для отображения таблиц. Поэтому пришлось целый проект добавлять в зависимость. Все компилится, скачал, проверил.
Конфигурации: Debug и Release. Остальные не трогайте. Студия: 2008.
Код путанный, это было моё первое (как всегда) приложение под MFC. Я всегда брался за сложные вещи и с самого начала.
П.С. Правда могут пути не совпасть. Я забыл поменять на относительные пути либо добавление библиотек, либо поиск инклудов. Поправьте сами в настройках проекта.
Отредактировано пользователем 28 ноября 2010 г. 12:56:39(UTC)
| Причина: Не указана
Россия навсегда! Вячеслав Мезенцев
1 пользователь поблагодарил уни за этот пост.
mikka оставлено 28.11.2010(UTC)
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 16.02.2010(UTC)
Сообщений: 114
Откуда: /dev/random
Сказал «Спасибо»: 4 раз Поблагодарили: 13 раз в 11 постах
из-за некого типа гражданской наружности Уни smath менее чем за неделю из достойного калькулятора превратился в ядрёнукачарышку!)))) мне нравится! спасибо!!!!
1 пользователь поблагодарил zhuk за этот пост.
уни оставлено 28.11.2010(UTC)
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Сказал «Спасибо»: 50 раз Поблагодарили: 156 раз в 105 постах
Надо только признать, что это было бы не возможно без заложенных в SMath Studio возможностей. Можно, конечно, ещё maple приделать как плагин, но это может поиметь оборотную сторону как с Mathcad. Там народ и не подозревал, что пользуется maple'овским движком для символьных вычислений, а вот когда срок подошёл... маткадовцы взялись за голову, они не развивали свои кадры в этом направлении, да и движок сам использовали только на 2% имеющихся возможностей, что вообще говоря не есть показатель умственной развитости менеджеров, которые такую связь одобрили. Купили потом лицензию MuPAD, а он продался конкурентам... сейчас Маткад у разбитого корыта. Да ещё и, возможно, перестанет поддерживать UserEFI интерфейс. Они оставляют его только разве что по просьбе Валерия Фёдоровича и другим похожим владельцам ПО, основанном на этой устаревшей технологии. Причём взамен ничего не предлагая. Вспоминается печальная судьба замечательной программки Derive, которую выкупил TI и благополучно похоронил... в своих калькуляторах. Так что желательно поднапрячься товарищам девелоперам и явить миру что-нить достойное хотя бы части символьных возможностей Мэпла. Тут ответ, что всё в руках плагинописателей, не потянет, т.к. либо это математическая программа, либо просто интерфейс для плагинов и не более того. Фотошоп тоже менеджер плагинов, но многое умеет и сам. Путь в общем-то не сложный. Ядро мэпла состоит из где-то 100 простых символьных операций, которые вообще даже имён не имеют, а вызываются по номеру. Всё остальное на них основано. Нужно взять какую-нить старую версию мэпла, где можно было посмотреть исходники символьных функций и попробовать портировать что-нить. Вот тогда появятся идеи что и как делать дальше. Может и типов каких добавить. Либо заглянуть в opensource проект какой и что-то взять оттуда. MuPAD очень похож по синтаксису с maple, но у него уже некая объектность появилась, как и у самого maple.
Россия навсегда! Вячеслав Мезенцев
Отладчик
(Предложения )
по mikka
03.08.2011 2:52:50(UTC)
Быстрый переход
Форум проекта SMath
SMath Studio
- Скачать SMath Studio
--- Архив
--- Ночные сборки
- Примеры использования
- Вопросы по использованию
- Предложения
- Ошибки
Математика
- Документы
- Алгоритмы
- Математические задачи
Общение
- О проекте
- Общение
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.