Форум » [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 пишет: Вообще-то Altd() - стандартная клипперовская функция. Неужели в xHarbour ее нет ? Так эта функция содержится в библиотеке debug.lib !

alkresin: Andrey пишет: Так эта функция содержится в библиотеке debug.lib ! Ну заср..цы! Она должна быть в rtl.lib, поскольку в Клиппере она в clipper.lib - прообразе rtl.lib. Придется мне вставить в hwgdebug.lib для xharbour эту функцию.

TimTim: alkresin пишет: Попробуйте еще один вариант ( по тому же адресу ). На тестовом примере без моих библиотек все ОК! Пример с моими lib-ами буду еще тестировать.


alkresin: На тестовом примере без моих библиотек все ОК! Там, возможно, образовался файл a.log - если так, что там написано ?

TimTim: alkresin пишет: Там, возможно, образовался файл a.log - если так, что там написано ? Такого файла нет. Я проверял в папке приложения. Кстати, о log-файлах, которые выдает отладчик, лучше их называть с префиксом, скажем hwg, поскольку, например, xMate, с которым я работаю, формирует файл ошибок приложения тоже с именем error.log

TimTim: Пример с моими либами тоже все ОК! Моя ошибка, сорри. В корне папки проекта действительно был пустой файл с именем основной программы, хотя все исходники были в папке .\Source. Не понимаю как такое могло быть, но было. Несколько замечаний по отладке такие. 1. Есть возможность посмотреть только Local переменные, а остальные типы Public, Private и т.д. 2. По F6 нет просмотра самой записи БД. 3. Во время отладки при входе в функцию, которая в проекте в отдельном prg-файле, в отладчике появляется пустая вкладка с именем Empty, а после неё уже вкладка с функцией. На отладку это не влияет, но зачем?

alkresin: 1. Есть возможность посмотреть только Local переменные, а остальные типы Public, Private и т.д. 2. По F6 нет просмотра самой записи БД. Я еще не решил, стоит ли это делать. В принципе, посмотреть нужные переменные и поля БД можно в Watch или просто в "командной строке". Всех private и public может быть много, а реально посмотреть надо, может, одну - две... 3. Во время отладки при входе в функцию, которая в проекте в отдельном prg-файле, в отладчике появляется пустая вкладка с именем Empty, а после неё уже вкладка с функцией. Непорядок. Надо будет разобраться.

AlexMyr: alkresin пишет: В принципе, посмотреть нужные переменные и поля БД можно в Watch или просто в "командной строке". Всех private и public может быть много, а реально посмотреть надо, может, одну - две... Это если знаешь о ее существовании и помнишь как она пишется (действительно же может быть их много), а так вывел список и видно что к чему.

alkresin: Выложил новую версию отладчика - 2.02. Добавлен просмотр массивов, объектов, private, public, static переменных, текущей записи БД. Подробности - на сайте и в readme.

AlexMyr: 1. При отладке классов надо два раза тапать F8 на строке определения класса CLASS anyClass чтобы пройти дальше. 2. В списке функций для класса показываются и определения методов и сами методы. Можно было бы показывать методом исключения, если есть и определение и присутствует метод - показываем что-то одно, если или определение, или метод, то или то, или другое. 3. На svn версия 2.01, на сайте 2.02, наверное просто номер версии на svn не поменяли. Все не критично, спасибо еще раз.

alkresin: Выложена версия 2.03 http://www.kresin.ru/debugger.html Whatsnew: [*] Now it is possible to open Object and Array Inspectors, clicking on the appropriate line in exisiting Inspector, thus to open for inspecting a nested object or array. [*] Method declarations ( between CLASS and ENDCLASS ) no more listed in functions list. [!] Small fix



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