2014-01-26 2 views
0

Я использую образ диска Ubuntu для архитектуры ARM в Qemu. Я компилирую несколько многопоточных программ на языке C и не делаю мало испытаний для их выполнения. Но для одной из программ в большинстве случаев ошибка с ошибкой сегментации. Я попытался проследить проблемную область, поставив инструкции printf. По моим наблюдениям он падает (где-то внутри функции, вызываемой функцией, передаваемой потокам) в разных местах, в основном, что затрудняет определение того, что пошло не так, и где это было?Ошибка сегментации в изображении qemu arm ubuntu?

Эта же программа работает нормально, независимо от того, сколько раз я ее выполняю, используя мою аппаратную машину Ubuntu x86.

Неужели кто-нибудь сталкивался с подобной проблемой? Возникает ли эта проблема из-за образа Qemu или диска или обоих?

Любая помощь?

+0

Возможно, стоит использовать [Valgrind] (http://valgrind.org/) в родной версии, чтобы отслеживать плохое поведение (даже несмотря на то, что ему не удается сбой), прежде чем приступать к усилиям кросс-отладки. – Notlikethat

+0

@Notlikethat Ну, он производит файл размером 98 КБ, теперь идея, что отслеживать? извинения за мое невежество ... – tod

ответ

0

Просто потому, что программа работает в одной среде, не гарантирует, что у нее нет ошибок. Заявки на печать - это один из способов поиска проблем, но несколько хитов. Лучше использовать настоящий отладчик. Возможно, вам понадобится сервер gdb и сетевой порт для отладки программы, запущенной внутри qemu, но это позволит вам установить точки останова, один шаг, просмотреть переменные и получить следы стека вашего сбоя.

+0

У меня этот образ диска установлен, и я делаю 'sudo chroot .'. Нет изображения gdb insdie. Не могли бы вы предложить, как получить gdb здесь или что еще можно сделать? – tod

+0

Перекрестная компиляция gdb & gdbserver. NFS монтируется и копируется. – stark

+0

Фактически, вам нужно только перекрестно скомпилировать gdbserver. Подключитесь к нему с помощью gdb, запущенного на хосте. – stark

Смежные вопросы