Я пытаюсь отладить приложение, написанное на c ++, скомпилированное для процессора на базе ARM под управлением Linux.
Когда приложение периодически дает сбой, оно останавливается в определенном потоке, и я предполагаю, что поток находится там, где есть ошибка (ошибка сегментации).
Моя проблема в том, что у меня возникают проблемы с определением ЧТО эта тема. Я вижу, что следующее запечатлено в затмении, когда GDB работает.
Какие цифры подчеркнуты синим и есть ли у меня способ получить к ним программный доступ, чтобы я знал, где искать в коде?
В дополнение к @ Хешан Перера ответ.
Вы также можете получить доступ к идентификатору потока, который является большим числом, внутри вашей программы
UNIX:
#include <sys/syscall.h>
syscall(SYS_gettid);
ОКНА: (не проверено)
#include <windows.h>
GetCurrentThreadId();
На основе эта ссылка отправленный @Selcuk Cihan в приведенном выше комментарии, первое число в квадратных скобках — это целочисленный идентификатор, назначенный самой GDB, а другой — SysTag, назначенный потоку.
Лучшее решение, если вы работаете в Linux / gcc, это на самом деле дать описательное имя потоку с pthread_setname_np. Затем GDB будет использовать это имя при достижении точек останова и так далее. Обратите внимание, что это расширение GNU для pthreads.