Форум » [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

gfilatov2002: alkresin пишет: осталась hb_processopen() #xtranslate hb_processOpen( [<x,...>] ) => hb_OpenProcess( <x> )

alkresin: Спасибо. Запостил все изменения на SVN, теперь hwgdebug.lib собирается и работает и под xHarbour.

alkresin: Выложил новую версию отладчика 1.02 ( отдельный бинарный дистрибутив ) Основные изменения: - добавлена библиотека xHarbour/hwgdebug.lib - для xHarbour 1.2.1 + Bcc - теперь можно менять шрифт - измененный шрифт и путь к исходникам можно сохранить в hwgdebug.xml, который находится рядом с hwgdebug.exe ( Options/Save settings ) - Символы табуляции в исходных файлах заменяются при просмотре на пробелы.


alkresin: Выложил новую версию отладчика 1.03 ( отдельный бинарный дистрибутив ) Кое-что подправлено, добавлена пара строчек для Minigui. Добавлена возможность сохранять и загружать точки останова. Они сохраняются в hwgdebug.xml, в секции, соответствующей имени отлаживаемой программы.

Andrey: alkresin пишет: добавлена пара строчек для Minigui. Спасибо БОЛЬШОЕ за вашу работу !!!

alkresin: Выложил новую версию - 2.00 Такой скачок в нумерации оттого, что изменения, действительно, существенные. Для просмотра исходников теперь используется не browse, а текстовый редактор ( правда, в readonly режиме ) с подсветкой синтаксиса. Кроме того, это окно сделано с закладками ( на основе tab'а ), так что можно одновременно держать открытыми несколько файлов и легко переключаться между ними. Чтобы легко найти текущую точку останова добавлен пункт меню Locate/Current position.

AlexMyr: Александр, а будет ли возможность как у стандартного отладчика просмотр значений массивов, объектов. Сейчас, например, есть переменная b1 := {1,2,3}, через watch видим только b1 Array(3):{"N","N","N"} и тоже для объектов getlist Array(1):{"O"}?

alkresin: Да, конечно. Надо только придумать наиболее подходящий интерфейс. А вообще напрашивается на базе этого дела небольшое IDE.

alkresin: Выложил 2.01 с маленьким исправлением + добавлена возможность при запуске hwgdebug.exe c именем отлаживаемой программы указать и параметры для этой программы.

TimTim: alkresin пишет: Выложил 2.01 Для xHarbour осталась версия 1.03.

alkresin: TimTim пишет: Для xHarbour осталась версия 1.03. Не понял. Где указана версия для xHarbour ? Если вы о библиотеке xHarbour/hwgdebug.lib, то она действительно не изменилась, как не изменилась и hwgdebug.lib для Harbour. 2.01 - версия исполняемого файла hwgdebug.exe

TimTim: Понял. Спасибо! Но у меня при попытке запустить отладчик выдается ошибка. Я думал это связано с библиотекой для xHarbour. Содержание error.log Error BASE/1132 Bound error: array access Called from \myapps\source\utils\codeedit\hcedit.prg->HCEDIT:MARKLINE(479) Called from \myapps\source\utils\codeedit\hcedit.prg->HCEDIT:SETCARETPOS(669) Called from \myapps\source\utils\codeedit\hcedit.prg->HCEDIT:GOTO(1052) Called from hwgdebug.prg->SETCURRLINE(730) Called from hwgdebug.prg->TIMERPROC(494) Called from hwgdebug.prg->(b)MAIN(218) 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(220) HWGUI 2.16c Build 1002 Harbour 3.2.0dev (Rev. 18481) Date:06/13/13 Time:17:21:06

alkresin: Странно. Не пойму что-то, в какой ситуации такое могло произойти. А текст отлаживаемой программы перед этим отобразился ? Вы отладчик запускали и из него программу, или сразу программу ?

TimTim: Ошибка происходит и при запуске программы и при запуске отладчика и из него программы. В обоих случаях текста отлаживаемой программы нет. Удается поработать в отладчике, если действовать так 1. Запустить отладчик 2. File->Open source file открываю основной модуль и он появляется в окне 3. File->Debug program После этого курсор на первом операторе основного модуля и можно по F8 отслеживать работу программы. Как только появляется вызов, скажем, какой-либо моей подпрограммы, в отладчике открывается вкладка Empty и текста в нем нет. Но если подгрузить соответствующий текст. то далее в отладчике можно следить за работой подпрограммы. Если при этом нажать F5, то отладчик закрывается и далее программа правильно отрабатывает. В тестовом примере используется моя библиотека (lib-файл). Попробую протестировать отладчик на тестовом примере без использования моей библиотеки.

alkresin: TimTim пишет: Ошибка происходит и при запуске программы и при запуске отладчика и из него программы. В обоих случаях текста отлаживаемой программы нет. А в заголовке окна отладчика имя prg файла и номер строки есть ? Название вкладки - Empty ? Как только появляется вызов, скажем, какой-либо моей подпрограммы, в отладчике открывается вкладка Empty и текста в нем нет. Путь ( Set Path ) предварительно пробовали установить ? Если, кстати, сделать Save Settings, его при следующем вызове не придется вводить.

TimTim: alkresin пишет: А в заголовке окна отладчика имя prg файла и номер строки есть ? Есть alkresin пишет: Название вкладки - Empty ? Да Если указать Set path и сделать Save Settings, то при запуске как программы, так и отладчика и из него программы тоже происходит ошибка, но вкладка уже имеет имя основного модуля и отображает только одну строку 9 return nil что судя по номеру к основному модулю не относится.

TimTim: Склепал по быстрому новый проект для тестирования отладчика без моих библиотек. Отладчик и при запуске программы и при запуске отладчика и из него программы выдает вкладку с именем Empty, в заголовке окна отображается имя основного модуля и номер первого исполняемого оператора. Set path указан, т.е. есть в файле hwgdebug.xml, кот. находится в папке с отлаживаемой программой. Если подгрузить File->open source file, то отладка продолжается в нормальном режиме.

alkresin: Если указать Set path и сделать Save Settings, то при запуске как программы, так и отладчика и из него программы тоже происходит ошибка, но вкладка уже имеет имя основного модуля и отображает только одну строку 9 return nil что судя по номеру к основному модулю не относится. Может, отладчик находит у вас другой файл с тем же именем ? Хотя я отработал у себя такую ситуацию - все нормально, т.е. не вылетает... Попробуйте вот этот экземпляр: http://www.kresin.ru/down/hwgdebug.zip - я поставил там дополнительную проверку. Set path указан, т.е. есть в файле hwgdebug.xml, кот. находится в папке с отлаживаемой программой. hwgdebug.xml должен быть в одном каталоге с отладчиком, а не с отлаживаемой программой.

TimTim: alkresin пишет: hwgdebug.xml должен быть в одном каталоге с отладчиком, а не с отлаживаемой программой. там же находится и отладчик, т.е. в папке с отлаживаемой программой. alkresin пишет: Попробуйте вот этот экземпляр Попробовал, то же самое. Кстати, в readme.rus говорилось об использовании Altd() в отладке, попробовал, не проходит линковка - неразрешимая ссылка.

alkresin: TimTim пишет: Попробовал, то же самое. Попробуйте еще один вариант ( по тому же адресу ). Кстати, в readme.rus говорилось об использовании Altd() в отладке, попробовал, не проходит линковка - неразрешимая ссылка. Хмм... Вообще-то Altd() - стандартная клипперовская функция. Неужели в xHarbour ее нет ?



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