#!/bin/bash

input=$1
# 检查参数数量
if [ $# -ne 1 ]; then
    input="^deepin-wine-builder"
fi

# 检查 gdb 是否已安装
if ! command -v gdb &> /dev/null; then
    echo "未找到 gdb，请先安装 (sudo apt install gdb)"
    sudo apt install gdb
fi

# 将输入参数转换为 PID
if [[ $input =~ ^[0-9]+$ ]]; then
    PID=$input
else
    # 使用 pgrep 查找进程名，取第一个匹配的 PID
    PID=$(pgrep -f "$input" 2>/dev/null)
    if [ -z "$PID" ]; then
        echo "错误: 未找到进程名为 '$input' 的进程"
        exit 1
    fi
    echo "找到进程 '$input' 的 PID: $PID"
fi

# 检查进程是否存在（使用 kill -0 仅测试权限和存在性）
if ! kill -0 "$PID" 2>/dev/null; then
    echo "错误: 进程 $PID 不存在或无权访问"
    exit 1
fi

echo "正在获取进程 $PID 的所有线程堆栈信息..."

# 使用 gdb 附加进程并打印所有线程的堆栈
gdb -quiet -batch -p "$PID" -ex "thread apply all bt" 2>&1

# 检查 gdb 执行状态
if [ $? -ne 0 ]; then
    echo "警告: gdb 执行过程中可能遇到问题（如权限不足或进程已退出）"
fi
