Как установить имя отдельного потока в Poco, которое будет видно для отладки в трассировках ядра/ps/gdb?

Недавно я начал программировать с потоками и наткнулся на Poco и его ресурс потоковой передачи, запуская поток из Poco::ThreadPool::defaultPool().start(*testThread, "HappyThread") и передавая строку «HappyThread» при вызове метода запуска.

После запуска и запуска потока я выполнил команду ps, чтобы получить имя потока, но он говорит «a.out».

vipin@VIPIN:~$ ps H -C a.out -o 'pid tid cmd comm'
PID   TID     CMD               COMMAND
14051 14051 ./a.out              a.out
14051 14052 ./a.out              a.out
14051 14053 ./a.out              a.out`

Принимая во внимание, что когда я использую pthread_setname_np(handle, «HappyThread»), вывод команды ps дает имя потока как «HappyThread», как показано ниже,

vipin@VIPIN:~$ ps H -C a.out -o 'pid tid cmd comm'
PID   TID    CMD                 COMMAND
14051 14051 ./a.out              a.out
14051 14052 ./a.out              HappyThread
14051 14053 ./a.out              a.out`

ниже мой пример кода (не идеальный, просто ленивый код):

test.cc:

#include "test.h"

void TestThread::run() {
    while (1)
    ;
}

тест.ч:

#include <Poco/Runnable.h>

class TestThread: public Poco::Runnable
{
    public:
    void run() override;
};

основной.cc:

#include "test.h"
#include <Poco/ThreadPool.h>

using Poco::ThreadPool;

int main()

{
    TestThread thread_t;

    ThreadPool::defaultPool().start(thread_t, "HappyThread");
    while (1)
    ;

}

Насколько я просмотрел документацию poco, передача строки в метод запуска устанавливает имя потока. Я даже пытался использовать класс Poco Thread, создал поток и вызвал метод setName, но наблюдал такое же поведение.

Любые предложения относительно того, почему такое поведение происходит с Poco, или нет возможности задать имя с помощью методов Poco для отражения в ОС, будут полезны для понимания этой проблемы и поиска решения.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
347
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я просто столкнулся с этим и понял это, немного покопавшись в исходном коде. Если вы посмотрите на реализацию платформы для Thread, вы заметите макрос, который включает/выключает имена потоков. в Thread_POSIX.cpp это POCO_POSIX_DEBUGGER_THREAD_NAMES, а в Thread_WIN32.cpp — POCO_WIN32_DEBUGGER_THREAD_NAMES.

Итак, вам просто нужно создать библиотеку с этими макросами, определенными для вашей платформы. В OSX я построил с помощью следующих команд, и теперь я вижу имена потоков в XCode:

cmake .. -DCMAKE_CXX_FLAGS = "-DPOCO_POSIX_DEBUGGER_THREAD_NAMES" -DBUILD_SHARED_LIBS=OFF
cmake --build . --config Release

Другие вопросы по теме