Могу ли я получить обратную трассировку из явно выделенного стека

У меня есть пул потоков, которые явно выделяют стеки (то есть, используя pthread_attr_setstack).

Можно ли использовать что-то вроде следа gnulib & backtrace_symbols в этом стеке?

Благодарю.

2

Решение

backtrace () возвращает backtrace для вызывающей программы в массиве
указывает на буфер.

Поэтому да, не важно, где был выделен стек. Вы просто вызываете его из целевого потока, и информация о стеке неявна в текущем указателе стека.

Если вы хотите вернуться другой нить (кроме той, которая работает) это сложнее. Во-первых, он может быть запущен, что может привести к попыткам возврата к гонкам. Но, с другой стороны, я не думаю, что есть какой-то стандартный способ ток указатель стека (с которого должна начинаться трассировка), чтобы сделать его видимым для другого потока. Без этой информации вы не сможете запустить трассировку, потому что в базе стека на самом деле недостаточно информации.

(ptrace может получить текущие значения регистра. Это системный вызов, используемый отладчиками. Это будет довольно разрушительным, хотя)

3

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

Других решений пока нет …