Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > FAQ

FAQ Часто задаваемые вопросы

Ответ
 
Опции темы
Старый 30.06.2010, 10:31   #1
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Техника отладки программ средствами MIDletPascal

Техника отладки программ средствами MIDletPascal.

Java отладка - несколько иная процедура, чем отладка компьютерных программ, т.к. среда не предоставляет средств для трассировки по одной команде, но производители эмуляторов восполняют этот пробел всевозможными мониторами. Например эмулятор из комплекта WTK позволяет отслеживать вызовы сборщика мусора, загрузки классов, исключения, вызовы методов, профилировщик, память, сетевой монитор, и д.р. (после создания проекта зайти в главное меню - Edit - Preferences - вкладка Monitor); Эмулятор KEmulator Lite отображает номер процесса и отслеживает вызовы методов, операции создания объектов, память и д.р. (главное меню - view - options - вкладка system). Информация из эмулятора поступает в стандартный вывод консоли. Консоль также доступна для произвольных сообщений из приложений j2me, для этого присутствует метод System.out.println().

В MIDletPascal имеется две системных функции отладки, работающие через System.out.println():

procedure Assert(cond: boolean) - если cond=false то появляется сообщение "Assertion failed at: Tetris.mpsrc:162", где "Tetris.mpsrc" - имя файла, "162" - номер строки, где стоит вызов Assert.

procedure Debug(s: string) - выводит строку s в консоль

Так консольный вывод, помимо сообщений java-машины, удобно применить для диагностических сообщений при работе с эмулятором, на реальном устройстве консольный вывод обычно игнорируют, однако некоторые телефоны имеют опции для перенаправления консольного вывода на какие-либо устройства.
Например меню в "Motorola V3i - Settings - Java Settings - Switching to Debug:" состоит из "Off", "USB", "Modem", "Bluetooth", "File". При выборе пункта "File" создается файл "/a/mobile/kjava/j2me.log" в него дописываются логи консоли, который нужно очищать если размер превысит 1MB иначе java начнет тормозить.


Пример получения лога консоли в Motorola V3i:

Тестовая программка
program dbgtest;
begin
assert(false);
debug('demo debug from MIDletPascal');
drawText('Hello world!', 0, 0);
repaint;
delay(2000);
end.

Сокращенный лог
############### 06/30/2010 11:59:17 ###############
ams_start_filelog - ok
AMS_JsaDialogCreate: 2048
.............
heapAddr:0x14569e60
heapSize:806940
EventHandler:1027814d
.............
FW@d590dbc 100
----- APP JK_VMEVENT_APPSTARTED callback begin.
AMS: VM_APPLICATION_STATE_CHANGED, 20
----- APP JK_VMEVENT_APPSTARTED callback end.

Assertion failed at: dbgtest.mpsrc:3
demo debug from MIDletPascal

----- APP JK_VMEVENT_APPDESTROYED callback begin.
AMS: VM_APPLICATION_STATE_CHANGED, 23
----- APP JK_VMEVENT_APPDESTROYED callback end.
kvm_main return code = 0
.............
==>>KDWP_SetKdwpOption(): DL_FsDeleteFile error (0x0)
ams_stop_filelog
############### 06/30/2010 12:01:31 ###############


Рассмотрим наиболее распространенный случай отладки программ MIDletPascal, в котором необходимо выявить причину зависания мидлета.

Техника применения:
1. В начале каждой подпрограммы установить вызов assert(false);
2. Запускаем программу в эмуляторе и после зависания открываем лог-файл консоли.
3. Ищем последнюю строку вида "Assertion failed at: dbgtest.mpsrc:3", где узнаем номер строки, а следовательно и название подпрограммы.
4. Ищем везде в исходниках проекта где встречается вызов этой подпрограммы, и добавляем до нее и после нее вызовы assert(false);
5. Запускаем еще раз, опять находим последнюю строку вида "Assertion failed at: dbgtest.mpsrc:3" так становится известен диапазон в исходнике.
6. Теперь добавляем вызовы assert(false) между командами для наиболее точного местоположения ошибки.
7. Для удобства можно добавлять информационные сообщения через debug('...');

arT(c)
IronWoodcutter@bk.ru
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо abcdef за это полезное сообщение:
cherepets (30.06.2010), dmitriy-dim (03.09.2010)
Старый 30.06.2010, 10:46   #2
cherepets
Бывалый
 
Аватар для cherepets
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Техника отладки программ средствами MIDletPascal

я обычно просто выделяю разные части кода в комментарий, чтобы понять из-за каких строк виснет
(Offline)
 
Ответить с цитированием
Старый 30.06.2010, 11:01   #3
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: Техника отладки программ средствами MIDletPascal

Исключение кода подходит, если не влияет на работоспособность.
Написал эту статью, т.к. разбирался с чужой программой более чем 2500 строк, которая висла в произвольных местах, как выяснилось из-за нехватки памяти на конструкции drawImage(imageFromImage(loadImage('/image.png'),...
помог принудительный вызов сборщика мусора
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
cherepets (30.06.2010)
Старый 30.06.2010, 12:06   #4
Pyth_ON
Оператор ЭВМ
 
Регистрация: 07.11.2008
Сообщений: 29
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Техника отладки программ средствами MIDletPascal

Сообщение от abcdef Посмотреть сообщение
Так консольный вывод, помимо сообщений java-машины, удобно применить для диагностических сообщений при работе с эмулятором, на реальном устройстве консольный вывод обычно игнорируют, однако некоторые телефоны имеют опции для перенаправления консольного вывода на какие-либо устройства.
Например меню в "Motorola V3i - Settings - Java Settings - Switching to Debug:" состоит из "Off", "USB", "Modem", "Bluetooth", "File". При выборе пункта "File" создается файл "/a/mobile/kjava/j2me.log" в него дописываются логи консоли, который нужно очищать если размер превысит 1MB иначе java начнет тормозить.
MOTOMAGX'ы кстати дебагают прямо в консоль если запустить jvm из нее, а там можно перенаправить вывод куда угодно
(Offline)
 
Ответить с цитированием
Старый 01.07.2010, 13:14   #5
cHeRsAnYa
ПроЭктировщик
 
Регистрация: 18.12.2007
Сообщений: 157
Написано 24 полезных сообщений
(для 27 пользователей)
Плохо Ответ: Техника отладки программ средствами MIDletPascal

Сообщение от abcdef Посмотреть сообщение
Java отладка - несколько иная процедура, чем отладка компьютерных программ, т.к. среда не предоставляет средств для трассировки по одной команде, ...
Я бы тут заменил Java на MidletPascal Т.к. при написании программ на j2me как раз можно выполнять код по строкам, так же как и при отладке обычных компьютерных программ.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (03.09.2010)
Старый 01.07.2010, 13:14   #6
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Техника отладки программ средствами MIDletPascal

Я обычно вставляю оператор debug чтобы выяснить в каком месте зависает или вылетает. Неплохо бы написать и про метод "железной" отладки прямо на самом телефоне. Потому что часто бывают специфические глюки, которые проявляются только на определенных моделях телефонов. Отладка программ на Java не представляет особых проблем, там можно выполнять программу построчно с мониторингом состояния любых переменных.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (03.09.2010)
Старый 03.07.2010, 13:42   #7
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: Техника отладки программ средствами MIDletPascal

если я что-то не то написал, то кто подскажет как в java среде телефона выполнять чужую программу покомадно с просмотром / изменением произвольных переменных, как в компьютерном дебагере - пусть первым бросит в меня камень.
а еще не вижу разницы между компилированой java программой и MIDletPascal, разве что нет обработчика исключений и несколько меньшая функциональность
(Offline)
 
Ответить с цитированием
Старый 05.07.2010, 07:26   #8
cHeRsAnYa
ПроЭктировщик
 
Регистрация: 18.12.2007
Сообщений: 157
Написано 24 полезных сообщений
(для 27 пользователей)
Ответ: Техника отладки программ средствами MIDletPascal

Чужую нельзя так Я имел в виду свои программы, когда есть java код. Для этого нужна IDE. Для дебага в эмуляторе особо ничего не надо - он по-умолчанию есть (по крайней мере в NetBeans точно), а для дебага на телефоне - нужно (если телефон SE, про другие не знаю) поставить его SDK и подключить телефон к OnDevice debug.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 17:04.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com