Автор | Сообщение |
|
| moderator
|
Пост N: 633
Зарегистрирован: 06.07.06
|
|
Отправлено: 22.05.13 18:54. Заголовок: GUI отладчик для Harbour
Запостил эту тему сюда, поскольку отладчик работает как с GUI, так и с консольными приложениями и может служить полноценной заменой стандартному. Итак, в новый релиз HwGUI вошел GUI отладчик для Harbour. Чуть позже, может, завтра, я сделаю соответствующую страницу у себя на сайте и отдельный бинарный дистрибутив отладчика, а пока - вот это описание. цитата: | 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, можно перемещаться по списку ранее введенных выражений ( при этом результат соответствующего выражения на тот момент, когда оно выполнялось, станет текущей строкой в окне выше. Можно перемещаться и по окну результатов выполнения, при двойном щелчке по любой строчке в окне ввода появится соответствующее этому результату выражение. |
|
|
|
|
Ответов - 51
, стр:
1
2
3
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 2836
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.05.13 21:55. Заголовок: alkresin пишет: в ..
alkresin пишет: цитата: | в новый релиз HwGUI вошел GUI отладчик для Harbour |
| Это просто СУПЕР ! Для МиниГуи давно хотелось иметь отладчик !!! А хХарбор поддерживать будет ?
|
|
|
|
| |
Пост N: 862
Зарегистрирован: 11.06.10
|
|
Отправлено: 22.05.13 22:30. Заголовок: Проверил маленькую к..
Проверил маленькую консольную прогу - работает, спасибо Александр. Будем тестить и использовать.
|
|
|
|
| moderator
|
Пост N: 634
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.05.13 07:49. Заголовок: Andrey пишет: А хХа..
Andrey пишет: цитата: | А хХарбор поддерживать будет ? |
| Должен. Я старался не использовать функции, которых нет в xHarbour. Учтите, что скомпилировать под xHarbour вам надо только библиотеку hwgdebug.lib, сам отладчик может быть сделан чем угодно, хоть на Бейсике :).
|
|
|
|
| moderator
|
Пост N: 635
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.05.13 08:47. Заголовок: Добавил на свой сайт..
|
|
|
|
| |
Пост N: 863
Зарегистрирован: 11.06.10
|
|
Отправлено: 23.05.13 09:32. Заголовок: Подсветка линии не х..
Подсветка линии не ходит за курсором по F8. Пытаюсь посмотреть отладчиком пример Димы http://clipper.borda.ru/?1-4-0-00000339-000-0-0-1368860560, просто тапаю F8 на цикле и вылетает: 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
|
|
|
|
| moderator
|
Пост N: 636
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.05.13 10:12. Заголовок: AlexMyr пишет: Подс..
AlexMyr пишет: цитата: | Подсветка линии не ходит за курсором по F8. |
| А должна ? Я не уверен. цитата: | Error BASE/1132 Bound error: array access Called from hwgdebug.prg->(b)MAIN(135) |
| Как раз ошибка позиционирования курсора. Исправление выложил на Sourceforge.
|
|
|
|
| |
Пост N: 864
Зарегистрирован: 11.06.10
|
|
Отправлено: 23.05.13 10:46. Заголовок: alkresin пишет: А д..
alkresin пишет: запустил отладчик, подсветка на первой строке, курсор на local... , тапаем F8, курсор бежит, подсветка осталась там же, уходим по F8 за пределы экрана, перерисовка, подсветка перепрыгивает на строку с курсором, снова F8, курсор поскакал, подсветка осталась на месте, т.е. основное внимание на подсветку, потом ищешь курсор, который маленький слева. Тогда какая роль подсветки строки, может попробовать без нее?
|
|
|
|
| moderator
|
Пост N: 637
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.05.13 10:58. Заголовок: Ок, уговорили, сдела..
Ок, уговорили, сделаю, чтобы подсветка "бежала" за указателем. Без нее нельзя, она указывает на строку, на которой вы можете нажать Enter или F9, чтобы установить точку останова.
|
|
|
|
| moderator
|
Пост N: 638
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.05.13 17:01. Заголовок: Перезалил hwgui с от..
Перезалил hwgui с отладчиком и отдельный дистрибутив - кое-что поправлено, добавлены средства для навигации по prg - поиск и список функций.
|
|
|
|
| Администратор
|
Пост N: 2884
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.05.13 15:27. Заголовок: alkresin пишет: And..
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
|
|
|
|
| moderator
|
Пост N: 639
Зарегистрирован: 06.07.06
|
|
Отправлено: 24.05.13 18:30. Заголовок: Pasha пишет: и вмес..
Pasha пишет: цитата: | и вместо begin sequence with поставить try - catch |
| Так begin sequence - стандартная Clipper'овская конструкция. Не может быть, чтобы она в xHarbour не поддерживалась.
|
|
|
|
|
| Администратор
|
Пост N: 2886
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.05.13 19:19. Заголовок: xHarbour не поддержи..
xHarbour не поддерживает опцию with: BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
|
|
|
|
| moderator
|
Пост N: 640
Зарегистрирован: 06.07.06
|
|
Отправлено: 25.05.13 07:50. Заголовок: А... Ну это можно и ..
А... Ну это можно и без try...catch, наверное, решить: bOldError := Errorblock( {|oErr|Break(oErr)} ) BEGIN SEQUENCE ... ... END SEQUENCE Errorblock( bOldError )
|
|
|
|
| |
Пост N: 93
Зарегистрирован: 03.12.08
|
|
Отправлено: 26.05.13 23:01. Заголовок: На MiniGUI работает ..
На MiniGUI работает ?
|
|
|
|
| Администратор
|
Пост N: 2888
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.05.13 09:02. Заголовок: Softlog86 пишет: На..
Softlog86 пишет: На Harbour совместно с библиотекой minigui должен работать.
|
|
|
|
| Администратор
|
Пост N: 2889
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.05.13 09:08. Заголовок: По поводу xHarbour. ..
По поводу 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
|
|
|
|
| moderator
|
Пост N: 641
Зарегистрирован: 06.07.06
|
|
Отправлено: 27.05.13 10:50. Заголовок: Может, проще для xHa..
Может, проще для xHarbour не включать в библиотеку dbgentry.c - он у них, я вижу, в vm находится...
|
|
|
|
| Администратор
|
Пост N: 2890
Зарегистрирован: 23.05.05
|
|
Отправлено: 27.05.13 12:03. Заголовок: alkresin пишет: Мож..
alkresin пишет: цитата: | Может, проще для xHarbour не включать в библиотеку dbgentry.c - он у них, я вижу, в vm находится... |
| Да, так конечно будет лучше.
|
|
|
|
| moderator
|
Пост N: 642
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.05.13 09:54. Заголовок: Кто знает, какие фун..
Кто знает, какие функции в xHarbour могут заменить Harbour'овские hb_progname() ( возвращает путь и имя программы, из которой функция вызвана ) и hb_processopen() ( для запуска другой программы ) ?
|
|
|
|
| moderator
|
Пост N: 643
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.05.13 10:17. Заголовок: Для hb_progname() на..
Для hb_progname() нашел замену - exename(), осталась hb_processopen(), а так xHarbour программы уже отлаживаются, сейчас пробовал.
|
|
|
Ответов - 51
, стр:
1
2
3
All
[только новые]
|
|