Re: Порт C++ > Android
От: cppboris  
Дата: 07.11.11 21:16
Оценка: :)
Собственно в чем сложность — множественные креши. То тут, то там... Без отладчика — очень сложно их находить и исправлять.
Порт C++ > Android
От: cppboris  
Дата: 07.11.11 21:06
Оценка:
Приветствую,

Подскажите, как портируют большие С++ проекты на андроид? У меня есть достаточно крупная 2D игра для iOS, написано все на С++/OpenGL. Задача — портануть это все на андроид.

Наслышан, что там с C++ все очень плохо — я про отладку. Без нормальной отладки никак сделать нельзя, одних логов мало. Есть варианты? Кто как делает?...

Надеюсь на вашу помощь, уважаемые коллеги!
android c++
Re[2]: Порт C++ > Android
От: Young yunoshev.ru
Дата: 08.11.11 09:16
Оценка:
Здравствуйте, cppboris, Вы писали:

C>Собственно в чем сложность — множественные креши. То тут, то там... Без отладчика — очень сложно их находить и исправлять.


Ну можно так — http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/

Я сам не настраивал, хотя тоже игры делаю, но знаю что настроить можно.

Мне хватает логов — имя функции где падает есть, чего еще нужно....

P.S. На всякий случай — http://www.codexperiments.com/android/2010/08/tips-tricks-debugging-android-ndk-stack-traces/
Re[3]: Порт C++ > Android
От: cppboris  
Дата: 08.11.11 10:35
Оценка:
Здравствуйте, Young, Вы писали:

Y>Здравствуйте, cppboris, Вы писали:


C>>Собственно в чем сложность — множественные креши. То тут, то там... Без отладчика — очень сложно их находить и исправлять.


Y>Ну можно так — http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/


Y>Я сам не настраивал, хотя тоже игры делаю, но знаю что настроить можно.


Y>Мне хватает логов — имя функции где падает есть, чего еще нужно....


Y> P.S. На всякий случай — http://www.codexperiments.com/android/2010/08/tips-tricks-debugging-android-ndk-stack-traces/


Благодарю за ссылки. Первую — нашел и сам, а вторая — в новинку!
Насчет того, что еще нужно — я и не говорю, что имея только лишь лог работать нельзя. Можно. Но тут вопрос удобства и экономии времени — с отладчиком все проще в разы.
Re[4]: Порт C++ > Android
От: in trance Россия  
Дата: 10.11.11 11:28
Оценка:
Здравствуйте, cppboris, Вы писали:

Y>> P.S. На всякий случай — http://www.codexperiments.com/android/2010/08/tips-tricks-debugging-android-ndk-stack-traces/


C>Благодарю за ссылки. Первую — нашел и сам, а вторая — в новинку!

C>Насчет того, что еще нужно — я и не говорю, что имея только лишь лог работать нельзя. Можно. Но тут вопрос удобства и экономии времени — с отладчиком все проще в разы.

ndk-stack (нужен NDK6) гораздо удобнее addr2line.
Re: Порт C++ > Android
От: MescalitoPeyot Украина  
Дата: 12.11.11 13:55
Оценка:
Здравствуйте, cppboris, Вы писали:

C>Наслышан, что там с C++ все очень плохо — я про отладку. Без нормальной отладки никак сделать нельзя, одних логов мало. Есть варианты? Кто как делает?...


К счастью, специфика проекта такова что баги в плюсовом коде кроссплатформенны и отлаживаю их на хосте. Когда-то настраивал по этому мануалу http://www.eclipse.org/sequoyah/documentation/native_debug.php работало. Были проблемы с багами в NDK-шных скриптах, с тем что до какой-то там версии Андроида брейкпоинты в не-главном потоке не ставились и приколы с тем что сколько-нибудь сложный Android.mk их скрипты нормально не едят (потому что при сборке оно требует относительные пути в нем, а при отладке абсолютные или наоборот, в общем что-то в этом духе), а в целом работало.
Re: Порт C++ > Android
От: Аноним  
Дата: 13.11.11 19:42
Оценка:
Здравствуйте, cppboris, Вы писали:

C>Наслышан, что там с C++ все очень плохо — я про отладку. Без нормальной отладки никак сделать нельзя, одних логов мало. Есть варианты? Кто как делает?...


В принципе, Eclipse позволяет настроить практически нормальную отладку нативного кода с некоторой степенью геморроя, но я, лично, этим не пользуюсь, так как панки из гугла едва ли не в каждой версии NDK все переделывают, в том числе, структуру каталогов, и то, что будет настроено, через несколько версий, скорее всего, перестанет работать, да и, возможно, эти же панки в очередной редакции возьмут и сами прикрутят нативный дебаг, кто их знает.

На практике мне до сих пор это не требовалось, так как C++-ный код в основном работает везде одинаково, и практически все баги отлавливаются на хосте, а в тех редких случаях, когда падает только под Андроидом, достаточно узнать, где упало. По крайней мере, до сих пор было так.

Если что, программа у нас весьма большая, не игра, но имеет что-то общее с игрой.
Re[2]: Порт C++ > Android
От: cppboris  
Дата: 13.11.11 19:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, cppboris, Вы писали:


C>>Наслышан, что там с C++ все очень плохо — я про отладку. Без нормальной отладки никак сделать нельзя, одних логов мало. Есть варианты? Кто как делает?...


А>В принципе, Eclipse позволяет настроить практически нормальную отладку нативного кода с некоторой степенью геморроя, но я, лично, этим не пользуюсь, так как панки из гугла едва ли не в каждой версии NDK все переделывают, в том числе, структуру каталогов, и то, что будет настроено, через несколько версий, скорее всего, перестанет работать, да и, возможно, эти же панки в очередной редакции возьмут и сами прикрутят нативный дебаг, кто их знает.


А>На практике мне до сих пор это не требовалось, так как C++-ный код в основном работает везде одинаково, и практически все баги отлавливаются на хосте, а в тех редких случаях, когда падает только под Андроидом, достаточно узнать, где упало. По крайней мере, до сих пор было так.


А>Если что, программа у нас весьма большая, не игра, но имеет что-то общее с игрой.


Эх, повезло вам

У нас такая ситуация — что падает только на андроиде. При этом креш из-за порченой памяти, случайный. То там, то тут. Совершенно не ясно почему так, так что место креша ни о чем не говорит к сожалению. Даже не знаю, как такое отлаживать... Идеальным вариантом был бы какой-то хитрющий монитор памяти, чтобы определить, в какой момент вооон там все меняется. А там — это у нас массив stl объектов (vector, list) и пр. Все едет.
Re[3]: Порт C++ > Android
От: Аноним  
Дата: 13.11.11 20:04
Оценка:
Здравствуйте, cppboris, Вы писали:

C>У нас такая ситуация — что падает только на андроиде. При этом креш из-за порченой памяти, случайный. То там, то тут. Совершенно не ясно почему так, так что место креша ни о чем не говорит к сожалению. Даже не знаю, как такое отлаживать... Идеальным вариантом был бы какой-то хитрющий монитор памяти, чтобы определить, в какой момент вооон там все меняется. А там — это у нас массив stl объектов (vector, list) и пр. Все едет.


Тогда вам стоит с помощью Sequoyah попробовать настроить, как выше написали.

А под iOS у вас портировано? Там отладка нормальная, и, по-идее, работать все должно практически так же, как под андроидом, так как аппаратная архитектура та же, и API — юниксовое, так что можно на iOS баги ловить.
Re[4]: Порт C++ > Android
От: cppboris  
Дата: 13.11.11 20:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, cppboris, Вы писали:


C>>У нас такая ситуация — что падает только на андроиде. При этом креш из-за порченой памяти, случайный. То там, то тут. Совершенно не ясно почему так, так что место креша ни о чем не говорит к сожалению. Даже не знаю, как такое отлаживать... Идеальным вариантом был бы какой-то хитрющий монитор памяти, чтобы определить, в какой момент вооон там все меняется. А там — это у нас массив stl объектов (vector, list) и пр. Все едет.


А>Тогда вам стоит с помощью Sequoyah попробовать настроить, как выше написали.


А>А под iOS у вас портировано? Там отладка нормальная, и, по-идее, работать все должно практически так же, как под андроидом, так как аппаратная архитектура та же, и API — юниксовое, так что можно на iOS баги ловить.


С iOS и портируем — там все чудесно. Настроить отладку по вышеуказанному методу не получилось, впрочем мы cgdb успешно пользуем. Вообще странно...
Re[3]: Порт C++ > Android
От: johny5 Новая Зеландия
Дата: 30.12.11 07:14
Оценка:
C>Эх, повезло вам

C>У нас такая ситуация — что падает только на андроиде. При этом креш из-за порченой памяти, случайный. То там, то тут. Совершенно не ясно почему так, так что место креша ни о чем не говорит к сожалению. Даже не знаю, как такое отлаживать... Идеальным вариантом был бы какой-то хитрющий монитор памяти, чтобы определить, в какой момент вооон там все меняется. А там — это у нас массив stl объектов (vector, list) и пр. Все едет.


Я бы порекомендовал компильнуть ваш проект на хосте с кастомным аллокатором, кот. аллочит строго нужное кол-во байт и оставляет защищённые страницы по сторонам. Тогда ваш баг стрельбы по памяти наверняка вылезет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.