GDB не ломается на SIGSEGV - PullRequest
       24

GDB не ломается на SIGSEGV

1 голос
/ 12 ноября 2010

Я пытаюсь отладить приложение для процессора ARM из моей коробки x86. Некоторые из них следовали инструкциям кого-то, кто приходил раньше, чтобы получить настройки среды разработки. У меня есть версия gdbserver, которая была скомпилирована для процессора ARM и, по-видимому, позволяет мне подключаться к ней через мой ARM-100 * * на моем компьютере.

Я ожидаю, что когда процесс, к которому у меня подключен gdb, подключен к сбоям (из SIGSEGV или аналогичного), он сломается, чтобы я мог проверить стек вызовов.

Это плохое предположение? Я новичок в мире ARM и кросс-компиляции, есть ли хороший ресурс, чтобы начать работу над этим материалом, который мне не хватает?

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Это зависит от целевой системы (той, которая использует процессор ARM).Некоторые встроенные системы обнаруживают недопустимые обращения к памяти (например, разыменование NULL), но реагируют на безусловное, неуловимое завершение системы (я занимался разработкой такой системы).На какой ОС работает целевая система?

1 голос
/ 12 ноября 2010

Итак, я предполагаю, что клиент gdb может подключиться к gdbserver, и вы можете поставить точку останова на работающий процесс, верно?

Если все вышеперечисленные шаги выполнены успешно, то вам следует поставить точку останова перед инструкцией, которая вылетает, скажем, если вы не знаете, где происходит сбой, то я бы сказал, что после сбоя приложения будет сгенерировано ядро, это ядро ​​с доски. Затем снова скомпилируйте исходный код с параметром отладки, используя параметр -g (если двоичные файлы удалены), и выполните автономный анализ ядра. что-то вроде ниже

двоичное имя GDB core_file

Затем, как только вы получите приглашение GDB, введите следующие команды

поток GDB применить все BT

Приведенная выше команда даст вам полную обратную трассировку всех потоков, помните, что двоичные файлы не должны быть удалены, и должен быть доступен правильный путь для всего исходного кода и разделяемой библиотеки.

вы можете переключаться между потоками, используя приведенную ниже команду в приглашении gdb

поток GDB номер_области

Если файл ядра не генерируется на плате, попробуйте команду ниже на плате перед выполнением приложения

ulimit -c неограничено

...