Я занимаюсь разработкой многопоточного приложения на C ++ с использованием GCC 4.4.5 и GDB 7.2.
На данный момент у меня четыре темы. Каждый из них взаимодействует с шиной CAN в той или иной форме, читая, записывая, опрашивая или обрабатывая сообщения.
Чтобы определить, какой поток что делает, я решил добавить идентификаторы потока в сообщения журнала.
В моих функциях регистрации у меня есть следующий код:
// This is for outputting debug messages
void logDebug(string msg, thread::id threadId[ = NULL]) {
#ifdebug _DEBUG
threadState.outputLock->lock();
if (threadId != NULL)
cout << "[Thread #" << threadId << "] ";
// The rest of the output
threadState.outputLock->unlock();
#endif
}
Это (отладочный) вывод из приложения:
[Thread #3085296768] [DEBUG] [Mon Jun 17 10:18:45 2019] CAN frame was empty or no message on bus...
----------
И это то, что GDB говорит мне:
Thread #3 7575 [core: 0] (Suspended: Breakpoint)
----
Почему отладчик дает мне информацию, отличную от приложения (идентификаторы / номера потоков), и есть ли способ вывести ту же информацию в приложении, как сообщает мне отладчик?
Ожидаемое поведение - идентификаторы потоков идентичны.
EDIT:
Я забыл добавить, возможно, важную информацию.
Я выполняю кросс-компиляцию на встроенное устройство, работающее на чипе POWERPC и работающее на основе Debian Wheezy.