Как программно идентифицировать идентификатор потока, напечатанный в GDB

Я пытаюсь отладить приложение, написанное на c ++, скомпилированное для процессора на базе ARM под управлением Linux.

Когда приложение периодически дает сбой, оно останавливается в определенном потоке, и я предполагаю, что поток находится там, где есть ошибка (ошибка сегментации).

Моя проблема в том, что у меня возникают проблемы с определением ЧТО эта тема. Я вижу, что следующее запечатлено в затмении, когда GDB работает.

Какие цифры подчеркнуты синим и есть ли у меня способ получить к ним программный доступ, чтобы я знал, где искать в коде?

введите описание изображения здесь

5

Решение

В дополнение к @ Хешан Перера ответ.

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

UNIX:

#include <sys/syscall.h>
syscall(SYS_gettid);

ОКНА: (не проверено)

#include <windows.h>
GetCurrentThreadId();
3

Другие решения

На основе эта ссылка отправленный @Selcuk Cihan в приведенном выше комментарии, первое число в квадратных скобках — это целочисленный идентификатор, назначенный самой GDB, а другой — SysTag, назначенный потоку.

0

Лучшее решение, если вы работаете в Linux / gcc, это на самом деле дать описательное имя потоку с pthread_setname_np. Затем GDB будет использовать это имя при достижении точек останова и так далее. Обратите внимание, что это расширение GNU для pthreads.

0
По вопросам рекламы [email protected]