Поиск создателя аварийно завершенного потока в OS X / gdb?

#macos #gdb #pthreads

#macos #gdb #pthreads

Вопрос:

допустим, я нахожусь в gdb и у меня есть стек вызовов, подобный этому:

 Thread 24 (process 6449):
#0 0x994010e2 in semaphore_wait_signal_trap ()
#1 0x9942ec9c in _pthread_cond_wait ()
#2 0x9947745f in pthread_cond_wait ()
#3 0x92ed1ccd in jpegdecompress_MPLoop ()
#4 0x9942e7fd in _pthread_start ()
#5 0x9942e682 in thread_start ()
  

Как мне узнать, кто создал этот поток?

Ответ №1:

В общем, вы не можете: у библиотеки pthread нет никаких причин записывать и хранить эту информацию.

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

Если вам действительно нужен ответ, вам придется записать трассировку стека во время pthread_create вызова и передать ее новому потоку для сохранения в каком-нибудь локальном потоке.