Как работает команда pstack? - PullRequest
3 голосов
/ 07 июля 2010

Мне любопытно узнать, как команда pstack печатает трассировку стека всех потоков, работающих под PID?

Она должна быть в некотором роде отличной от того, как это делает GDB, поскольку процесс выполняется внутри GDB.окружение, но pstack выполняется после выполнения процесса.

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

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

Если вы хотите точно знать, как это делается, поищите информацию о ptrace.

Кроме того, процессы на самом деле не запускаются "внутри GDB". Вы можете без проблем подключить GDB к запущенному процессу, запустив gdb executable pid.

0 голосов
/ 15 июня 2018

pstack печатает вывод, аналогичный cat / proc / "pid" / tasks / * / stack, поэтому наиболее вероятно, что он читает procfs, а не использует ptrace.

...