У меня есть пул потоков, которые явно выделяют стеки (то есть, используя pthread_attr_setstack).
Можно ли использовать что-то вроде следа gnulib & backtrace_symbols в этом стеке?
Благодарю.
backtrace () возвращает backtrace для вызывающей программы в массиве
указывает на буфер.
Поэтому да, не важно, где был выделен стек. Вы просто вызываете его из целевого потока, и информация о стеке неявна в текущем указателе стека.
Если вы хотите вернуться другой нить (кроме той, которая работает) это сложнее. Во-первых, он может быть запущен, что может привести к попыткам возврата к гонкам. Но, с другой стороны, я не думаю, что есть какой-то стандартный способ ток указатель стека (с которого должна начинаться трассировка), чтобы сделать его видимым для другого потока. Без этой информации вы не сможете запустить трассировку, потому что в базе стека на самом деле недостаточно информации.
(ptrace
может получить текущие значения регистра. Это системный вызов, используемый отладчиками. Это будет довольно разрушительным, хотя)
Других решений пока нет …