Россия, Звенигород |
Основные концепции
1.7. Отладка: отладка извне
Mozilla - достаточно сложная система. Если настроить ее некорректно, сложнее будет заставить работать приложения. Число непонятных проблем уменьшается с каждой исправленной ошибкой, но лучше попытаться достичь успеха с самого начала.
Можно использовать большое число настроек Mozilla, чтобы упростить себе жизнь. Самым очевидным решением будет научиться пользоваться отладчиком JavaScript, его кодовое название - Venkman. Вы найдете его, выбрав "Инструменты" | "Web-разработка" | Отладчик JavaScript. Если вам нравятся графические многофункциональные отладчики, это как раз для вас. Я предпочитаю философию UNIX - множество маленьких инструментов - поэтому здесь нет руководства по отладчику. Чтобы запустить отладчик, нужно добавить следующую строку в скрипт своего приложения:
debugger;
В Netscape 7.0 не входит отладчик (в 7.1 он есть), но можно загрузить и установить его самостоятельно. Найти отладчик отдельно можно на сайте DevEdge, http://devedge.netscape.com.
1.7.1. Важные настройки
Прежде всего, необходимо правильно настроить Mozilla. Настроек в Mozilla больше тысячи. И только небольшое их подмножество доступно через меню "Правка" | "Настройки".... Все остальные настройки задаются вручную с помощью текстового редактора. Во время редактирования настроек вручную Mozilla не должна быть запущена, потому что иначе при завершении работы она перезапишет измененные настройки. То же относится и к продуктам Netscape 4.x.
Можно просматривать и редактировать большую часть настроек, введя в строку адреса about:config. Следует помнить, что при простом щелчке правой кнопкой по настройке значение не изменится. Помимо показанных в этом списке настроек, существуют и скрытые.
Чтобы сохранить изменения настроек на диск, необходимо отредактировать файл prefs.js или preferences.js в нужном профиле пользователя, создать новый файл настроек под названием user.js в профиле или отредактировать файл all.js в каталоге установки Mozilla. Этот файл находится в подкаталоге defaults/prefs. при редактировании можно просто скопировать уже существующую строку и изменить ее. Порядок записи настроек не имеет значения.
В таблице 1.2 приведен список настроек, которые разработчикам приложений лучше всего изменить.
Существует большое количество других настроек вывода информации или отладки, но они не так полезны. Также важно убедиться, что в настройках кэша браузера задано сравнение содержимого кэша с загружаемыми страницами при каждом просмотре.
Возможно, вы захотите тестировать свои приложения как на Netscape 7.0, так и на платформе mozilla.org. В Microsoft Windows сложно отключить быстрый запуск для Netscape 7.0. Даже если во время установки выбрать "нет", быстрый запуск все равно может использоваться. Постарайтесь найти и удалить этот ключ из реестра Windows:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Во время работы Mozilla обычно имеет дело с несколькими окнами за раз. Количество окон может сбивать с толку, особенно если у вас установлено несколько версий платформы.
1.7.2.1. Поведение в Microsoft Windows
Если новое окно открывается в Microsoft Windows, оно будет относиться к текущему запущенному экземпляру Mozilla. Это значит, что в любой момент времени может быть запущен только один экземпляр Mozilla и, естественно, только одна ее версия.
Если окно открывается из командной строки или из значка на рабочем столе, то сначала происходит поиск уже запущенной Mozilla. Если Mozilla запущена, ей отправляется инструкция "открыть окно" и на этом обработка команды завершается. Mozilla загружается целиком заново только в том случае, если еще не был запущен ни один ее экземпляр.
То есть если у вас установлены две версии Mozilla, обычно вы не можете запустить их обе одновременно. Однако это ограничение можно обойти. Для этого требуется сделать копию исполняемого файла Mozilla, отредактировать ресурсы этой копии с помощью редактора ресурсов (например, из Microsoft Visual C++) и изменить строки ресурсов 102 и 103 в таблице строк на что-нибудь другое. Сохраните изменения. Теперь эта копия может запускаться как отдельный экземпляр исходного исполняемого файла. Для нее также должен быть создан отдельный профиль. Но необходимо помнить, что вы сюда вносили изменения.
Кроме того, можно (и иногда очень легко) создать некорректное XUL- приложение. Когда открываются окна такого приложения, кажется, что все в порядке, хотя они могут вести себя не так, как следовало бы. В некоторых случаях при закрытии таких окон платформа все равно остается запущенной. Тогда следующее открытое окно будет использовать уже запущенную платформу, хотя та может работать с ошибками из-за запуска некорректного приложения.
Если вам кажется, что у вас именно такой случай, нажмите Control- Alt-Delete и проверьте, не запущены ли какие-нибудь процессы Mozilla, хотя все окна уже закрыты. Если вы их найдете, эти процессы спокойно можно уничтожить.
1.7.2.2. Поведение в UNIX X11/GTK
В системах UNIX/Linux запуск Mozilla из командной строки или пиктограммы на рабочем столе никак не будет взаимодействовать с уже запущенной платформой. То есть это коренным образом отличается от поведения платформы в Microsoft Windows и действительно для версий не ниже 1.4.
Иногда это неудобно, поскольку в приложениях XUL обычно нет стандартных меню, предоставляющих доступ к таким удобным инструментам как Инспектор DOM, отладчик и консоль JavaScript. Без таких меню непонятно, как открыть эти инструменты, поэтому их сложнее использовать во время разработки. В Windows можно просто запустить еще одно окно навигатора и воспользоваться его меню. В UNIX так сделать нельзя.
Тем не менее, консоль JavaScript можно запустить довольно легко, достаточно просто добавить этот ключ к команде запуска своего приложения:
-jsconsole
Более общий обходной путь подразумевает включение небольшого скрипта в ваше приложение (см. листинг 1.4). Чтобы этот скрипт работал, приложение должно быть установлено в chrome, так как необходимо снять некоторые ограничения безопасности.
<script> var options = "chrome,extrachrome,menubar,resizeable,scrollbars, status,toolbar"; var domins = " chrome://inspector/content/inspector.xul"; var jscons = "chrome://global/content/console.xul"; if (window.name == "_blank") { setTimeout("window.open '"+location+"','test','chrome')",5000); setTimeout("window.close()",6000); window.open(domins,"_blank",options); window.open(jscons,"_blank",options); } </script>Листинг 1.4. Запуск инструментов отладки для Mozilla вместе с приложением
Этот скрипт запускает Инспектор DOM и консоль JavaScript при загрузке документа, а затем заменяет документ его копией в другом окне. Последнее нужно, чтобы окно приложения открылось последним. Порядок загрузки позволяет Инспектору DOM "заметить" окно приложения, которое потом можно исследовать.
Между Mozilla и тем, что вы видите на экране в ОС UNIX, находится множество промежуточных слоев - других приложений. Если активно экспериментировать, можно натолкнуться на ошибки, скрывающиеся где- нибудь в самой графической среде. Если что-то "зависает" или ведет себя совсем не так, как ожидалось, в этом сразу винят Mozilla, но причина может быть и в какой-нибудь другой программе. С помощью команд top(1), ps(1) и kill(1) завершайте работу одной программы за другой, пока проблема не исчезнет. Вот примерный порядок проверки:
- Перезапустить все процессы Mozilla, очистив файлы .mfasl, если они есть.
- Перезапустить менеджер окон (sawfish, twm, enlightenment и т.д.).
- Перезапустить всю графическую среду (GNOME, KDE, OpenStep и т. д.).
- Перезапустить X-сервер (XFree86, vncserver и т. д.).
- Выйти из системы и зайти в нее снова.
- Перезагрузить компьютер.
Конечно, такие проблемы встречаются достаточно редко, но систематический подход к их решению поможет сэкономить уйму времени. Кроме того, он избавит Mozilla от клеветы.
1.7.3. Параметры компиляции
Чтобы скомпилировать Mozilla самостоятельно, можно собрать исполняемый файл со включенной дополнительной отладкой. Некоторые из этих дополнительных функций могут быть включены с помощью "волшебных" переменных окружения. Помните также, что при использовании некоторых из них вы будете получать массу информации.
Чтобы собрать Mozilla c включенными функциями отладки, потребуется использовать параметр --enable-debug. Это параметр для скрипта configure, который запускается перед началом компиляции. Если отладка включена, в компиляции будут участвовать те части кода, которые относятся к функциям отладки. Чтобы не указывать этот параметр и многие другие вручную при запуске configure, можно создать специальный файл, откуда скрипт и будет считывать параметры. Этот файл можно легко создать с помощью формы, расположенной на http://webtools.mozilla.org/build/config.cgi.
Чтобы понять, какие переменные окружения активируют какие-либо функции отладки, изучите исходные коды Mozilla. Это также полезно, если вы хотите узнать, какие еще функции отладки можно активировать во время отладки (например, #ifdef EXTRA_DEBUG ).
1.8. Итоги
Mozilla - не только браузер, но и инструмент, который можно задействовать для более быстрого создания приложений, чем при использовании традиционных языков программирования третьего поколения. Она позволяет использовать в традиционных графических приложениях некоторые из преимуществ web-приложений. Использование при этом интерпретируемых языков открывает возможность очень быстрой пошаговой разработки и создания эффективных прототипов. Однако желание узнать инструмент получше и заглянуть внутрь него занимает очень много времени, к тому же поиск и исправление синтаксических ошибок возлагаются на плечи разработчика.
Корни Mozilla - в разработке технологии браузеров, и в этой области ей есть что предложить пользователю. Она поддерживает современные стандарты и легко переносима. В системах UNIX это самый очевидный, если не единственный, выбор браузера. Однако архитектурные расширения внутри Mozilla интереснее всего разработчикам. Внутренняя компонентная структура Mozilla предоставляет разработчику набор готовых к применению сервисов, а новый язык разметки интерфейсов XUL очень удобен. Все это позволяет Mozilla считаться платформой для разработки, хотя еще и очень новой.
Mozilla поддерживается организацией, которая ориентирована как на коммерческую деятельность, так и на работу со свободным сообществом разработчиков. Любому интересующемуся технической информацией она предлагает множество ресурсов, при этом ничего не требуя взамен. Это организация со многими партнерами в сфере бизнеса, науки и комитетов по стандартизации, и она очень уверенно держится на плаву. Судя по всему, развиваемая ею технология имеет все шансы стать полезной и популярной.