Отладка B2G с помощью Valgrind

На этой странице возникла скриптовая ошибка. Хотя она адресуется редакторам сайта, вы можете просмотреть частичное содержимое ниже.

{{ FirefoxOSSidebar }}

Инструмент Memcheck Valgrind обнаруживает ошибки C ++ управления памятью, которые могут привести к стабильности и безопасности проблем: использование освобожденной памяти, кучи перерасход массива, использует неинициализированной значений и утечек памяти. Он включен в дереве Firefox OS, и может работать на некоторых телефонах, которые имеют достаточные ресурсы. В этой статье объясняется, как использовать его.
Требования
Перед запуском Valgrind против Firefox OS, рекомендуется, чтобы разработчики ознакомиться с Debugging Mozilla со статьей Valgrind. Большая часть содержащейся в нем информации имеет отношение к работает против Firefox OS, хотя многие из сборки и командных этапов линии заботятся операционной системой сборки и выполнения сценариев Firefox.

Чтобы запустить Valgrind против Firefox OS на телефоне, требуется телефон с выше чем нормальные спецификации. Valgrind требует значительных ресурсов, и, как правило, вызывают из-за ошибок памяти на телефонах с чем-то меньшим, чем 1 Гб оперативной памяти. На момент написания (2015-06-10), Valgrind, как известно, работать с Firefox OS работает на Flame телефонов с 1 Гб или RAM и Nexus 5 телефонов с 2 Гб оперативной памяти. Она также должна работать на Geeksphone Keons и аналогичные спецификации телефонов. Посмотрите на телефон и устройство передачи данных для более подробной информации о доступных телефонов.

Проблема номер один бежит из памяти. Если ядро ​​вашего телефона поддерживает пространство подкачки, ваша ситуация улучшается. Вы можете сказать, поддерживает ли ваш телефон пространство подкачки с помощью поиска файла / Proc / свопы - если он присутствует, вам повезло. Если да, то подготовить файл подкачки на хосте, переместите его в телефон, и включить его:

дд, если = / DEV / нуль = swapfile800M бс = 1024 Количество = 781250
mkswap swapfile800M
GZIP --fast swapfile800M
ADB толчок swapfile800M.gz / данные
ADB оболочка GZIP -d /data/swapfile800M.gz
ADB оболочки swapon / данные / swapfile800M

ADB оболочки кота / Proc / свопы
# Должен производить такую ​​строку:
# / Данные / swapfile800M файл 781244 0 -2
Если ваш телефон не имеет своп, могут возникнуть Nuwa-процессы, созданные будучи ООМ убитыми, и, следовательно, неполной или запутанным функциональность. Попробуйте использовать телефон по меньшей мере, 2 Гб оперативной памяти в этом случае. Пламя, по крайней мере, делает поддержку своп. Вы должны быть осторожны, какой раздел файл подкачки размещен на. Если вы ненароком положил ее на раздел Btrfs, вы будете получать жалобы по поводу дыр в файлы подкачки при попытке запустить swapon.

Запуск Valgrind на FxOS телефоны
Давайте посмотрим на процесс запуска Valgrind.

составление

Для создания Firefox OS с включенным Valgrind, добавьте следующую строку в файл в .userconfig.

экспорт B2G_VALGRIND = 1
экспорт DISABLE_JEMALLOC = 1
Строительство отладки (B2G_DEBUG) также рекомендуется. Строительство без каких-либо оптимизаций (B2G_NOOPT) делает вещи работать почти unusably медленно, и не рекомендуется, за исключением тех случаев, когда считается, что оптимизация может быть запутывания ошибки.

И добавьте следующие строки в конец Gonk-разностороннего / Default-геккона-конфигурации:

ac_add_options --enable-оптимизируют = "- г -O2"
ac_add_options --enable-Valgrind
ac_add_options --disable-jemalloc
ac_add_options --disable-песочницу
Отключение песочницу, к сожалению, требуется, так как не делать это вызывает процессы, valgrind быть убитым механизмом песочнице.

Бег

Примечание: Запуск Valgrind на телефон Firefox OS будет сделано в контексте телефона, а не в операционной системе хоста. Это означает, что разработчики могут использовать любую платформу, которая ADB доступна и будет выполнять run-valgrind.sh скрипт для запуска Valgrind по телефону.
Чтобы запустить Firefox OS под Valgrind, используйте run-valgrind.sh скрипт из каталога B2G. Этот скрипт выполняет следующие действия:

Перемонтирует файловую систему телефона в виде R / W.
Копии текущей отладки libxul.so с полными символов в телефон. Поскольку этот файл много сотен мегабайт, то этот шаг может занять около двух минут, чтобы закончить. Она должна быть переделана каждый раз, когда новая сборка производится. Чтобы запустить Valgrind без libxul этапе копирования, выполните следующую команду:
run-valgrind.sh NOCOPY
Перезагрузка телефона.
Убивает процесс b2g, который запускается при включении телефона.
Запускает свой собственный процесс b2g под Valgrind.
Все выходные Valgrind будут записаны на стандартный вывод терминала исполняющего run-valgrind.sh сценарий. Это может быть либо прочитать в терминале или по трубопроводу в файл.

run-valgrind.sh начинает Valgrind с соответствующим набором параметров командной строки. Если вы хотите передать в дополнительные параметры, которые переопределяют набор параметров по умолчанию, задайте их с помощью переменной среды extra_args:

Extra_args = "- v" run-valgrind.sh NOCOPY
Примечание: Так как run-valgrind.sh сценарий владеет ADB процесс, запущенный процесс b2g, убивая сценарий будет также убить B2G и Valgrind по телефону. Рекомендуется, чтобы телефон будет перезагружен после запуска VALGRIND сеанса, так как она может оставить вещи в странном состоянии.
Debug информация для системных библиотек

Чтобы получить хорошее качество трассировки стека для системных библиотек, вам нужно поместить их по телефону:

(CD выход / целевого / продукта / пламя && ADB нажимные символы / SDCard / символы-для-Valgrind)
run-valgrind.sh будет автоматически вызывать Valgrind для чтения объектов отладки в / SDCARD / символов-для-Valgrind. Если вы хотите, чтобы убедиться, что Valgrind читает их, начинают run-valgrind.sh с extra_args = "- V".

Запуск Valgrind на Firefox OS Desktop
Запуск Valgrind против Firefox OS Desktop работает точно так же, как работает это против настольного Firefox. Обратитесь к Debugging Mozilla с Valgrind страницы для получения дополнительной информации. Все соответствующие флаги сборки должны быть добавлены к mozconfig, и будут применяться все вопросы, специфичные для платформы на странице.

Обратите внимание, что запуск Valgrind на рабочем столе в режиме ООП / процесс-за-вкладке потребует добавления следующий параметр, чтобы убедиться, что дочерние процессы также прослеживаются:

--trace-дети = да
Поддержание и обновление Firefox OS Valgrind
В то время как патчи upstreamed, когда это применимо, Valgrind для Firefox OS поддерживается в раздвоенным хранилище, чтобы держать вещи в курсе, насколько это возможно в то же время имеем дело с расцентрировок OS сборки дерева и версии Firefox.

Обновление VALGRIND Repos

ПРЕДУПРЕЖДЕНИЕ: ОПЫТ GIT ТРЕБУЕТСЯ. Не пытайтесь обновить VALGRIND сделок РЕПО, если вы не знакомы с обработкой сложных операций Git. Любые обновления к GitHub репо будет отражать в git.mozilla.org, который затем будет запряженных разработчиков, использующих ГОЛОВУ РЭПО манифестов. В то время как поломка Valgrind не будет ломать строит на что-либо, что не включено Valgrind (например, автоматизация Buildbot), это будет очень раздражают разработчиков, которые пытаются использовать его.
Основные Firefox OS, valgrind и VEX операции РЕПО находятся на

http://github.com/mozilla-b2g/valgrind
http://github.com/mozilla-b2g/vex
Главный филиал является нетронутым версия ствола SVN каждого из этих репозиториях, а ветвь Firefox OS содержит Firefox OS специфичные патчи перебазировались на верхней части туловища.

Примечание: ВСЕГДА ОБНОВЛЕНИЕ ОБА REPOS ОДНОВРЕМЕННО. В то время как они являются два отдельных операций РЕПО, VEX обычно подмодуль Valgrind, и глава Valgrind обычно указывает на голову VEX.
Они копируются на git.mozilla.org домен для использования в B2G проявляется:

http://git.mozilla.org/?p=b2g/valgrind.git;a=summary
http://git.mozilla.org/?p=b2g/vex.git;a=summary
Основные операции РЕПО сохраняются в синхронизации с VALGRIND СВН с ГИТ СВН. Для того, чтобы тянуть обновления к сделкам РЕПО, клонировать Valgrind и досадить сделок РЕПО с GitHub, а затем выполните следующую команду:
мерзавец СВН -s Init [URL репо подрывная]
Натяжение данные SVN будет занять несколько часов, но когда это будет сделано, ваше дерево должно быть синхронно с основным Valgrind SVN.
Чтобы вытащить дальнейшие обновления, следующий набор команд используется:
мерзавец мастер-выписка
мерзавец СВН выборки
мерзавец СВН перебазироваться
мерзавец толчок [GitHub-дистанционное имя] мастер
Git fxos Кассовые
мерзавец мастер перебазироваться
Существует хороший шанс, что будет конфликты патч во время этапа ветви Rebase Firefox OS. Если вы не можете работать вопрос вне, по электронной почте автор конфликтующих фиксации.
После перебазирования, запустить полную Firefox OS построить с флагом B2G_VALGRIND, чтобы убедиться, что она по-прежнему строит. Наиболее распространенные необходимые исправления перечислены в сценарии раздела ниже.
После того как вы перебазировались и испытанные сборку против дерева Firefox OS, вам придется заставить толкать ветку Firefox OS из-за изменения головы.
мерзавец кнопка -f [-дистанционного имя GitHub] fxos
Сборка, установка и запуск скриптов

Есть несколько сценариев, которые являются либо частью ветви Valgrind Firefox OS или B2G репо, которые могут нуждаться в обновлении после извлечения репо.

внешняя / Valgrind / android.mk

Это сценарий Android система сборки. Чаще всего, это где изменения должны быть сделаны, из-файлы добавляются / удаляются из дерева Valgrind в. Использование ключей -j1 сборки, чтобы увидеть, какие цели не удается построить, и если он отсутствует файл или ссылки на несуществующий файл, обновить список файлов этого проекта.

внешняя / Valgrind / valgrind.mk

Этот документ содержит список пакетов, которые должны быть построены и добавлены к системе изображения FxOS, на который ссылается Gonk-разностороннего / b2g.mk. Это, как правило, не нуждается в обновления, как это редкий для Valgrind, чтобы добавить новые пакеты, но если они нужны, их здесь.

run-valgrind.sh

Сценарий для запуска Valgrind по телефону. Если есть новые аргументы командной строки, которые необходимы для запуска Valgrind по телефону, их здесь. Это также, где мы копируем библиотеку с отладочной к телефону, поэтому любая корректировка / изменение этого процесса должно произойти здесь.

Метки документа и участники

 Внесли вклад в эту страницу: chrisdavidmills, TheSharkMan
 Обновлялась последний раз: chrisdavidmills,