Форум » [x]Harbour » GUI отладчик для Harbour » Ответить

GUI отладчик для Harbour

alkresin: Запостил эту тему сюда, поскольку отладчик работает как с GUI, так и с консольными приложениями и может служить полноценной заменой стандартному. Итак, в новый релиз HwGUI вошел GUI отладчик для Harbour. Чуть позже, может, завтра, я сделаю соответствующую страницу у себя на сайте и отдельный бинарный дистрибутив отладчика, а пока - вот это описание. [quote] 1. Введение Отладчик состоит из двух частей: 1) Библиотека hwgdebug.lib, которая должна быть прилинкована к приложению, которое вы собрались отлаживать, вместо стандартной hbdebug.lib. Ее исходники находятся в hwgui/source/debug, она является частью HwGUI проекта, но не содержит в себе вызовов HwGUI функций и классов и поэтому может использоваться и с консольными приложениями, и с GUI приложениями, собранными при помощи любых других GUI библиотек. 2) Исполняемый модуль hwgdebug.exe - собственно, сам отладчик - отдельная ( в отличие от стандартного, встроенного в отлаживаемое приложение ) GUI программа, написанная на Harbour+HwGUI. Его исходники находятся в hwgui/utils/debugger. Поскольку HwGUI - кроссплатформенная библиотека, исполняемый модуль может быть собран и под Windows, и под другой ОС, где есть GTK ( например, Linux ). Отладчик связывается с отлаживаемой программой посредством специальных файлов, которые могут быть расположены в любом удобном месте. Поэтому отлаживаемая программа может физически находиться на другом компьютере и даже быть собрана на другой ОС. Таким образом, мы можем, используя Windows версию hwgdebug.exe на своем компьютере, отлаживать программу, работающую на другом компьютере в сети под управлением Linux или, например, OS2. 2. Как собрать приложение и запустить его на отладку Собирается приложение таким же образом, как и раньше, как со стандартным отладчиком. Мы добавляем ключ -b к вызову компилятора Harbour и добавляем библиотеку отладчика в список библиотек для линкера, только теперь это не hbdebug.lib, а hwgdebug.lib. Запустить приложение на отладку можно несколькими способами: 1) Как и раньше, просто запустив приложение. При старте оно попытается найти и запустить отладчик. Чтобы это получилось, он должен быть расположен или в рабочем каталоге приложения, или где нибудь в доступном месте ( куда указывает переменная окружения PATH ). Можно указать местоположение отладчика в специальном файле hwgdebug.info, но об этом позже. Если отладчик не будет найден, программа выдаст сообщение "Hwgdebug isn't available..." и ее работа продолжится без отладчика. 2) Запустить сам отладчик и затем из него запустить приложение на отладку, используя меню File/Debug program. 3) Запустить отладчик, указав имя отлаживаемой программы в командной строке, например: hwgdebug.exe c:\myapps\someapp.exe При этом, как и в предыдущем случае, приложение запустится на отладку сразу же. 4) Запустить отладчик, указав в командной строке опцию -w с именем каталога, доступного для чтения/записи и ему, и отлаживаемой программе, например: hwgdebug.exe h:\shared\ а потом запустить отдельно отлаживаемую программу, рядом с которой должен находиться файл hwgdebug.info с указанием того же каталога. Именно этот режим позволяет отлаживать программу удаленно. 3. Использование hwgdebug.info В рабочем каталоге отлаживаемой программы можно разместить файл hwgdebug.info и указать в нем некоторые параметры для запуска отладчика, а именно: dir = d:/shared Debugger = c:\tools\hwgdebug.exe RunAtStart = On Dir - имя каталога для хранения временных файлов, связывающих программу с отладчиком, этот каталог должен быть доступен для чтения/записи и программе, и отладчику, он может располагаться в любом удобном месте в сети. Указать этот параметр необходимо при запуске отладчика по варианту 4 ( см. выше ). Debugger - путь к отладчику и его имя, может быть указан, если его местоположение не указано в PATH или если вы хотите использовать другой экземпляр отладчика. RunAtStart - если эта опция опущена или установлена в Off, отладка стартует с первой исполняемой строчки программы. Если же она установлена в On, то она стартует как в стандартном отладчике - в месте программы, где предварительно поставлены Altd(2); Altd(). 4. Отладка Если отладчик и ваша программа запустились нормально, между ними установлено соединение и программа остановилась ( на первой строчке или после Altd() ), в заголовке окна отладчика появится имя соответствующего prg модуля и номер строки, где произошла остановка, в главном окне отладчика должен появиться текст этого prg. Если в заголовке все есть, а в окне текста нет - значит, prg не найден ( он расположен в другом каталоге ) и вам надо указать путь к нему с помощью меню File/Set path. Основные функции отладчика - те же, что и в стандартном ( можут, их немного меньше на данный момент ) и работают они примерно так же: Команды Go, Step, Trace, To cursor, Next Routine, Animate, установка и удаление точек останова ( для этого можно дважды щелкнуть по соответствующей строчке ), просмотр Workareas - для них предусмотрены те же горячие клавиши. Просмотр локальных переменных, установка так называемых Watch - выражений, значения которых вычисляются при каждой итерации, просмотр стека вызова процедур ( дважды щелкнув по любой из них, мы переключаем окно с текстом программы на эту процедуру ). Вычисление выражений по ходу отладки - вводите выражение в окне ввода в нижней части главного окна отладчика и жмите кнопку OK или клавишу ENTER - результат должен появиться в окне чуть повыше. Пользуясь кнопками слева от OK или клавишами Up, Down, можно перемещаться по списку ранее введенных выражений ( при этом результат соответствующего выражения на тот момент, когда оно выполнялось, станет текущей строкой в окне выше. Можно перемещаться и по окну результатов выполнения, при двойном щелчке по любой строчке в окне ввода появится соответствующее этому результату выражение. [/quote]

Ответов - 51, стр: 1 2 3 All

Andrey: alkresin пишет: в новый релиз HwGUI вошел GUI отладчик для Harbour Это просто СУПЕР ! Для МиниГуи давно хотелось иметь отладчик !!! А хХарбор поддерживать будет ?

AlexMyr: Проверил маленькую консольную прогу - работает, спасибо Александр. Будем тестить и использовать.

alkresin: Andrey пишет: А хХарбор поддерживать будет ? Должен. Я старался не использовать функции, которых нет в xHarbour. Учтите, что скомпилировать под xHarbour вам надо только библиотеку hwgdebug.lib, сам отладчик может быть сделан чем угодно, хоть на Бейсике :).


alkresin: Добавил на свой сайт страницу http://www.kresin.ru/debugger.html отладчика, там есть и ссылка на бинарный дистрибутив, куда входит только сам отладчик с библиотеками.

AlexMyr: Подсветка линии не ходит за курсором по F8. Пытаюсь посмотреть отладчиком пример Димы http://clipper.borda.ru/?1-4-0-00000339-000-0-0-1368860560, просто тапаю F8 на цикле и вылетает: [pre2]Error BASE/1132 Bound error: array access Called from hwgdebug.prg->(b)MAIN(135) Called from source\hbrowse.prg->FLDSTR(1908) Called from source\hbrowse.prg->HBROWSE:LINEOUT(1049) Called from source\hbrowse.prg->HBROWSE:PAINT(761) Called from source\hbrowse.prg->HBROWSE:ONEVENT(300) Called from ->HWG_REDRAWWINDOW(0) Called from source\hbrowse.prg->HBROWSE:REFRESH(1871) Called from hwgdebug.prg->TIMERPROC(344) Called from hwgdebug.prg->(b)MAIN(194) Called from source\htimer.prg->HWG_TIMERPROC(60) Called from ->HWG_ACTIVATEMAINWINDOW(0) Called from source\hwindow.prg->HMAINWINDOW:ACTIVATE(292) Called from hwgdebug.prg->MAIN(196) HWGUI 2.16c Build 1003 Harbour 3.2.0dev (r1305151954) Date:05/23/13 Time:09:31:18[/pre2]

alkresin: AlexMyr пишет: Подсветка линии не ходит за курсором по F8. А должна ? Я не уверен. Error BASE/1132 Bound error: array access Called from hwgdebug.prg->(b)MAIN(135) Как раз ошибка позиционирования курсора. Исправление выложил на Sourceforge.

AlexMyr: alkresin пишет: А должна ? Я не уверен. запустил отладчик, подсветка на первой строке, курсор на local... , тапаем F8, курсор бежит, подсветка осталась там же, уходим по F8 за пределы экрана, перерисовка, подсветка перепрыгивает на строку с курсором, снова F8, курсор поскакал, подсветка осталась на месте, т.е. основное внимание на подсветку, потом ищешь курсор, который маленький слева. Тогда какая роль подсветки строки, может попробовать без нее?

alkresin: Ок, уговорили, сделаю, чтобы подсветка "бежала" за указателем. Без нее нельзя, она указывает на строку, на которой вы можете нажать Enter или F9, чтобы установить точку останова.

alkresin: Перезалил hwgui с отладчиком и отдельный дистрибутив - кое-что поправлено, добавлены средства для навигации по prg - поиск и список функций.

Pasha: alkresin пишет: Andrey пишет: цитата: А хХарбор поддерживать будет ? Должен. Я старался не использовать функции, которых нет в xHarbour. Учтите, что скомпилировать под xHarbour вам надо только библиотеку hwgdebug.lib, сам отладчик может быть сделан чем угодно, хоть на Бейсике :). Все-таки hwgdebug.lib не собирается через xHarbour В debugger.prg надо сделать косметическую правку: #ifndef __XHARBOUR__ THREAD STATIC t_oDebugger #else STATIC t_oDebugger #endif и вместо begin sequence with поставить try - catch Для dbgentry.c нужны более существенные изменения, связанные с различным api

alkresin: Pasha пишет: и вместо begin sequence with поставить try - catch Так begin sequence - стандартная Clipper'овская конструкция. Не может быть, чтобы она в xHarbour не поддерживалась.

Pasha: xHarbour не поддерживает опцию with: BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }

alkresin: А... Ну это можно и без try...catch, наверное, решить: bOldError := Errorblock( {|oErr|Break(oErr)} ) BEGIN SEQUENCE ... ... END SEQUENCE Errorblock( bOldError )

Softlog86: На MiniGUI работает ?

Pasha: Softlog86 пишет: На MiniGUI работает ? На Harbour совместно с библиотекой minigui должен работать.

Pasha: По поводу xHarbour. Различия в api следующие: 1. Параметры hb_macroGetType. Можно сделать замену: #ifndef __XHARBOUR__ type = hb_macroGetType( pStr ); #else type = hb_macroGetType( pStr, HB_SM_RT_MACRO ); #endif 2. Различная структура frame в HB_VARINFO, и соответственно разные параметры в некоторых функциях вроде hb_dbgEntry 3. В xHarbour отсутствуют функции hb_arraySetCLPtr, hb_stackDebugInfo, hb_itemMove, hb_dbg_objSendMessage

alkresin: Может, проще для xHarbour не включать в библиотеку dbgentry.c - он у них, я вижу, в vm находится...

Pasha: alkresin пишет: Может, проще для xHarbour не включать в библиотеку dbgentry.c - он у них, я вижу, в vm находится... Да, так конечно будет лучше.

alkresin: Кто знает, какие функции в xHarbour могут заменить Harbour'овские hb_progname() ( возвращает путь и имя программы, из которой функция вызвана ) и hb_processopen() ( для запуска другой программы ) ?

alkresin: Для hb_progname() нашел замену - exename(), осталась hb_processopen(), а так xHarbour программы уже отлаживаются, сейчас пробовал.



полная версия страницы