Установка и настройка Open Watcom. Windows Host. QNX4 Target. ------------------------------------------------------------- Установка Open Watcom из бинарного дистрибутива 1. Установить с настройками по умолчанию (в С:\WATCOM) Настройка IDE и Текстового Редактора 1. Скинуть в C:\WATCOM файлы настроек IDE c поддержкой QNX4 Target из ow_changes\watcom. Подтвердить перезапись. 2. Скинуть в C:\Documents and Settings\User_Name\Aplication Data\Open Watcom\ файлы настроек редактора и (немного) общих настроек IDE из ow_changes\ini *. Каталог Open Watcom нужно создать. *Так же, можно настроить Текстовый Редактор вручную, через его меню. Для того чтобы редактор работал только со Unix-style окончанием строк и имел удобные Tab и Font настройки нужно сделать следующее (для нужных типов из поля File Types): - В меню Options->File Specific сбросить галки “Autodetect CRLF” и “Write CRLF”. Для Windows-slyle окончания строки – этот пункт пропустить - Установить галку “Real Tabs” и в поле “Hard Tab” поставить 4. - Нажать ОК, выход из диалога - В меню Options->Fonts выбрать нужный размер шрифта (и сам шрифт), затем из окошка “Drag and Drop” перекинуть пример текста в окно редактора. Если в нем был текст, то он сразу измениться на установленные значения. Удобный размер шрифта 16. - Сохранить все сделанные настройки Options->Save Configuration Добавление файлов из QNX4 Для построения исполняемых файлом требуются оригинальные заголовочные файлы и библиотеки из дистрибутива QNX4. Их нужно скопировать в С:\WATCOM из ow_changes\qnx_files\. Cодержимое каталога qnx_files сформировано следующим образом. Все файлы из /usr/include, кроме файла String.h*, нужно поместить в каталог ow_changes\qnx_files\h\qnx4\. Все файлы из /usr/lib нужно поместить в ow_changes\qnx_files\lib386\qnx4\. * Файл String.h это аналог string.hpp. В Windows, для языка Си нужно испоьзовать string.h а для С++** файл string.hpp. ** Для С++ требуется заменить все Си++ библиотеки QNX4 (Watcom 10.6) на аналогичные из Open Watcom. Так же требуется замена некотрых стандартных заголовочных файлов С. Подробнее можно посмотреть в ow_q4_win\setup.bat. Для работы с некотрыми классами потребуется пересобрать сlib из QNX4 (исходники закрыты для публичного доступа). Создание тестового проекта в Open Watcom IDE 1. Запускаем IDE 2. Создаем новый проект. File->New Project… В появившемся диалоговом окне выбираем где будет лежать проект. Создаем новый каталог с именем проекта (например, создаем каталог myproj), входим в него и присваеваем тоже название файлу проекта (myproj.wpj). 3. При этом, появляется окно New Target, в котором указано, что имя целевого исполняемого файла будет myproj, тип цели – QNX 4, на выходе будут образы исполняемых файлом с расширением .qnx . В Windows все заточено под расширения файлов, поэтому все настройки сделаны для расширение qnx. У проекта может быть несколько целей. Например, под Windows, под Linux и под QNX. При задании имени целевого файла следует учитывать, что он будет сохранен в каталог проекта. Для одной цели это нормально. Проект с несколькими целевыми платформами следует разнести по подкаталогам внутри проекта. Так, для того чтобы все что касается qnx (исполняемые, объектные файлы, файл символов, файл карты и др.) было бы в отдельном каталоге, нужно создать внутри каталога myproj подкаталог qnx4 и в поле Target Name диалога New Target указать новый путь к цели – qnx4\myproj.qnx 4. Затем появляется пустое окошко, относящееся к цели myproj.qnx. В этом окне отображается и изменяется список исходных файлов, из которых строится цель. Для добавления новых или уже сществующих исходных файлов нужно в контекстном меню этого окна выбрать единственный доступный пункт – New Source… 5. Откроется диалоговое окошко по добавлению файлов для цели myproj.qnx проекта myproj. Исходные тексты лучше всего хранить в каталоге проекта, если нет более глубокой иерархии. Если добавляет новый файл, в поле File Name нужно писать его имя с расширение, например new.c . Для добавления нужно затем нажать кнопку Add. После того как добавлены все нужные файлы нажимаем на Close. При этом, в списке си-файлов, после нового файла будет пометка n/a (not avalable). То есть, на самом деле его еще нет, он лишь “запланирован” на использование. Для того чтобы начать редактировать нужно дважды кликнуть по файлу или в контекстном меню на файле выбрать Edit Text. Откроется Open Watcom Text Editor. После добавления кода в исходный файл, его нужно сохранить. Затем возвращаемся в IDE и сохраняем проект в целом. 6. Теперь все готово для сборки цели. Если нужно изменить какие-либо опции компилятора wcc386, то сделать это можно через меню IDE Options->C Compiler Switches… Изменение опций линкера wlink доступно через Options->Linker Switches… Для сборки нужно нажать кнопку Make Target на панели инструментов. При этом, внизу появится окно IDE Log, где будет отображаться ход сборки. Там можно увидеть какие ключи используются для компиляции и линковки. Если проект собрался без ошибок, то в каталоге myproj появится целевой исполняемый файл myproj.qnx . Осталось только перенести его на целевую систему QNX4, добавить там ему права на выполнение chmod u+x ./myproj.qnx и затем запустить на выполнение ./myproj.qnx, все! Сборка сервера отладки для QNX4 1. Скачиваем файл архива с исходными текстами Open Watcom, с любым расширением 2. Извлекаем из него данные, внутри обычно каталог с именем owxxsrc, где хх – номер версии 3. После распаковки все исходники имеют атрибут Read Only. Нужно в свойствах каталога owxxsrc снять этот атрибут рекурсивно. 4. Делаем копию файла setvars.bat из корня owxxsrc 5. В setvars.bat делаем следующие изменения: - в переменную OWROOT прописываем путь к каталогу скачанных исходников - в переменную WATCOM прописываем путь к установленному бинарному дистрибу, обычно это c:\watcom - устанавливаем переменную DOC_BUILD=0 6. В корневом каталоге сорцов запускаем cmd /k setvars.bat. Появится настроенный шелл для сборки. Текущий каталог owxxsrc\bld 7. Делаем предварительную сборку необходимых утилит (builder, pmake, bwcl386, etc…см. каталог bld\build\binnt\ после сборки). Для этого: - cd builder\nt386 - wmake - cd ..\..\ - builder build bootstrap * *может завершиться с ошибкой, главное чтобы были собраны компилятор bwcl386, pmake и builder 8. Вносим в дерево сорцов измененные файлы из каталога ow_changes\owsrc. Подтвердаем перезапись. Внесенные изменения можно увидеть если сравнить соответствующие файлы, например, в Total Commander через меню Files->Compare By Content... 9. Переходим в каталог trap и запускаем сборку файлов для QNX4 - cd trap - builder build os_qnx 10. В итоге получатся следующие файлы для QNX4: bld\trap\lcl\qnx\pmd\pmd.trap – Postmortem Debugger Trap файл. Ядро отладки предназначенное для изучения упавших программ. bld\trap\lcl\qnx\std\std.trap – Cтандартное ядро отладки для QNX4 bld\trap\tcp\qnx.srv\tcpserv.qnx – Сервер отладки под QNX4, осуществляющий взаимодействие между trap файлом и удаленным пользовательским интерфейсом отладки (wdw, wd) по TCP/IP. Эти три файла нужно перенести на целевую систему и поместить в один каталог. Файлу сервера отладки нужно дать права на выполнение: # chmod u+x tcpserv.qnx Удаленная отладка приложений Open Watcom поддерживает отладку через несколько интерфейсов и протоколов (tcp, ser, par и пр.). Тут описывается только tcp вариант, поскольку для QNX4 собран только TCP/IP сервер отладки. Со стороны Windows запускается пользовательский интерфейс отладки wdw (или wd). В качестве trap файла ему передается tcp.dll файл с ip адресом. Эта часть уже настроена в IDE. Требуется только указать ip адрес своей целевой системы. В IDE это можно сделать через меню Options->Remote Debug Switches. На целевой системе сервер отладки запускается так: # ./tcpserv.qnx По умолчанию, сервер слушает на порту 3563, а в качестве trap-файла подгружает std.trp файл из текущего каталога. После старта stdin, stdout и stderr отлаживаемой программы сервер перенаправляет на себя. При отладке, удобно подtelnetиться к QNX4, запустить сервер отладки и наблюдать за выводом программы через телнет. Если сервер незапускается с ошибкой "unable to bind socket" (обычно этому предшествует падение сервера), то скорее всего еще работает клиент wdw или wd, оставшийся от предыдущей сессии. Нужно завершить клиент, запустить на сервер, а затем снова запустить клиент. Еще встречается падение сервера с ошибкой "Broken pipe". Ее причина пока не установлена, но в основном она возникала когда wdw/wd запускался, но не имел достаточных и правельных данных и наполовине пути, завершался. После того, как настроены обе стороны, в IDE для старта отладчика нужно выбрать Targets->Remote Debug. Окно отладчика можно уменьшить до 3/4 экрана, а снизу поместить окно консоли с telnet, в котором запущен сервер отладки. Можно запускать wdw/wd и вручную, для этого нужно перейти в каталог проекта и дать команду: wdw -trap=tcp;192.168.83.128 -down qtest8.qnx здесь опция -down указывает на то, что перед отладкой исполняемый файл нужно загрузить на целевую систему. В каталоге проета должен быть файл символов или же отладочная информация должна быть внутри исполняемого файла. Отладка может производиться (==имеет смыл) только при наличии отладочной информации. Для текущей настройки IDE, вся отладочная информация сохраняется в специальный .sym файл (файл символов). Отладчик использует этот файл для того чтобы отображать процесс отладки на уровне исходных текстов (языка Си). При такой настройке среды IDE исполняемый файл изначально не несет в себе отладочной информации, она сохраняется в отдельный файл символов. И после этапа отладки исполняемый файл в неизменном виде готов к работе на целевой системе (если только не применяется последующая пересборка проета с опцией оптимизации). Файл символов так же полезно сохранить для случаев для исследования дампа упавшей программы. Удаленное изучение дампа упавшей программы Если программа аварийно завершается выдавая на консоль что-то вроде //2/tmp/ow/crasher.qnx terminated (SIGSEGV) at 0007:00009040. %1 5822 Memory fault ./crasher.qnx то нужно получить дамп памяти этой программы в момент ее завершения, чтобы проанализировать какую операцию перед падением программа хотела выполнить и каково было ее окружение (переменные, стек, регистры процессора). Для этого нужно запустить: # dumper & Затем следует запустить падующую программу, например, cracher.qnx . После ее падения в корне (так как это домашний каталог root'а в 4-ке) появится файл дампа с именем crasher.qnx.dmp Для удаленного изучения дампа памяти в QNX4, сервер отладки нужно запустить так: #./tcpserv.qnx -trap=pmd Если выходит сообщение "unable to bind socket", то порт 3563 занят. Можно запустить постмортем отладку на другом порту, параллельно обычной отладке: # ./tcpserv.qnx -trap=pmd 3564 то есть на следующем свободном порту. При изменении порта, его нужно указать и в настройках IDE через символ ':' после ip адреса. Но, все же, лучше делать что-то одно. Настройки можно менять через меню IDE Options->Postmortem Remote Debug Switches... В частности, нужно установить ip адрес своей целевой системы. На второй странице задается путь к Dump File на удаленной машине. Если путь отличается от корня, то после символа / нужно добавить необходимое. Запуск отладчика можно произвести через меню Targets->Postmortem Remote Debug. Можно запускать и вручную, из консоли. Для этого нужно перейти в каталог проекта и выполнить: wdw -trap=tcp;192.168.83.128 :crasher.sym @R/crasher.qnx.dmp здесь через двоеточие указывается файл с символьной информацией, а после опции @R указывается удаленный файл дампа упавшей программы.