Подскажите, как портируют большие С++ проекты на андроид? У меня есть достаточно крупная 2D игра для iOS, написано все на С++/OpenGL. Задача — портануть это все на андроид.
Наслышан, что там с C++ все очень плохо — я про отладку. Без нормальной отладки никак сделать нельзя, одних логов мало. Есть варианты? Кто как делает?...
Здравствуйте, cppboris, Вы писали:
C>Собственно в чем сложность — множественные креши. То тут, то там... Без отладчика — очень сложно их находить и исправлять.
Благодарю за ссылки. Первую — нашел и сам, а вторая — в новинку!
Насчет того, что еще нужно — я и не говорю, что имея только лишь лог работать нельзя. Можно. Но тут вопрос удобства и экономии времени — с отладчиком все проще в разы.
Здравствуйте, cppboris, Вы писали:
Y>> P.S. На всякий случай — http://www.codexperiments.com/android/2010/08/tips-tricks-debugging-android-ndk-stack-traces/
C>Благодарю за ссылки. Первую — нашел и сам, а вторая — в новинку! C>Насчет того, что еще нужно — я и не говорю, что имея только лишь лог работать нельзя. Можно. Но тут вопрос удобства и экономии времени — с отладчиком все проще в разы.
Здравствуйте, 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++-ный код в основном работает везде одинаково, и практически все баги отлавливаются на хосте, а в тех редких случаях, когда падает только под Андроидом, достаточно узнать, где упало. По крайней мере, до сих пор было так.
Если что, программа у нас весьма большая, не игра, но имеет что-то общее с игрой.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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 баги ловить.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, cppboris, Вы писали:
C>>У нас такая ситуация — что падает только на андроиде. При этом креш из-за порченой памяти, случайный. То там, то тут. Совершенно не ясно почему так, так что место креша ни о чем не говорит к сожалению. Даже не знаю, как такое отлаживать... Идеальным вариантом был бы какой-то хитрющий монитор памяти, чтобы определить, в какой момент вооон там все меняется. А там — это у нас массив stl объектов (vector, list) и пр. Все едет.
А>Тогда вам стоит с помощью Sequoyah попробовать настроить, как выше написали.
А>А под iOS у вас портировано? Там отладка нормальная, и, по-идее, работать все должно практически так же, как под андроидом, так как аппаратная архитектура та же, и API — юниксовое, так что можно на iOS баги ловить.
С iOS и портируем — там все чудесно. Настроить отладку по вышеуказанному методу не получилось, впрочем мы cgdb успешно пользуем. Вообще странно...
C>Эх, повезло вам
C>У нас такая ситуация — что падает только на андроиде. При этом креш из-за порченой памяти, случайный. То там, то тут. Совершенно не ясно почему так, так что место креша ни о чем не говорит к сожалению. Даже не знаю, как такое отлаживать... Идеальным вариантом был бы какой-то хитрющий монитор памяти, чтобы определить, в какой момент вооон там все меняется. А там — это у нас массив stl объектов (vector, list) и пр. Все едет.
Я бы порекомендовал компильнуть ваш проект на хосте с кастомным аллокатором, кот. аллочит строго нужное кол-во байт и оставляет защищённые страницы по сторонам. Тогда ваш баг стрельбы по памяти наверняка вылезет.