如何查看 AIX 机器上正在运行的进程的所有线程的堆栈和状态。linux上的命令或工具(如pstack)也应该有帮助..
我试过procstack,但没有帮助。它没有向我显示任何堆栈。虽然没有错误..
有任何想法吗..?
procstack 是否需要与使用 debig 信息编译的进程关联的所有可执行文件和库?
谢谢。
如何查看 AIX 机器上正在运行的进程的所有线程的堆栈和状态。linux上的命令或工具(如pstack)也应该有帮助..
我试过procstack,但没有帮助。它没有向我显示任何堆栈。虽然没有错误..
有任何想法吗..?
procstack 是否需要与使用 debig 信息编译的进程关联的所有可执行文件和库?
谢谢。
这是我使用 dbx 编写的脚本,用于打印给定进程 ID 的所有线程的堆栈。希望这会有所帮助,在 aix 上对我来说就像一个魅力
if [ $# -ne 1 ]
then
echo "Usage dbxstack <processid>";
exit;
fi
rm -rf printthreads.fordbx
echo "thread" >> printthreads.fordbx
echo "detach" >> printthreads.fordbx
echo "quit" >> printthreads.fordbx
dbx -a $1 -c printthreads.fordbx > threads.tempdbx 2>/dev/null
awk '$1 ~ /\$t/ { print $1 }' threads.tempdbx | sed s/\$t//g | sed s/\>//g > threadsids.tempdbx
rm -rf printthreads.fordbx
for i in `cat threadsids.tempdbx`
do
echo "print \"------------------------\"" >> printthreads.fordbx
echo "thread current $i" >> printthreads.fordbx
echo "where" >> printthreads.fordbx
echo "print \"---------tid $i---------\"" >> printthreads.fordbx
i=$(( $i+1 ));
echo $i;
done
echo "detach" >> printthreads.fordbx
echo "quit" >> printthreads.fordbx
dbx -a $1 -c printthreads.fordbx > $1.stacktrace 2> $1.stacktracerr
rm -rf threads.tempdbx threadsids.tempdbx printthreads.fordbx