#!/bin/bash
# ./your_script.sh /path/to/my_program "param1 param2"


# 默认值
EXEC_PATH="$1"
EXEC_PARAMS="$2"

LOG_DIR="./trace_logs"
# 获取当前时间（启动时间）
START_TIME=$(date +"%Y%m%d_%H%M%S")

# 设置保存调用栈的文件路径，文件名包括启动时间
OUTPUT_FILE="${LOG_DIR}/call_stack_${START_TIME}.txt"
LOG_FILE="${LOG_DIR}/console_output_${START_TIME}.log"

# 开始捕获控制台输出
exec > >(tee -a $LOG_FILE) 2>&1

# 检查日志目录是否存在，如果不存在则创建
if [ ! -d "$LOG_DIR" ]; then
  echo "$LOG_DIR 文件夹不存在，正在创建..."
  mkdir -p "$LOG_DIR"
  sudo chmod 777 "$LOG_DIR"
fi

# 打印脚本开始的时间
echo "脚本开始执行时间：$START_TIME"

# 以管理员权限启动 gdb 调试器，并传入命令行参数
sudo gdb $EXEC_PATH \
  -ex " handle SIGINT nostop print pass " \
  -ex "set logging file ${OUTPUT_FILE}" \
  -ex "set logging on" \
  -ex "run $EXEC_PARAMS" \
  -ex "bt" \
  -ex "quit" &

# 获取当前时间（结束时间）
END_TIME=$(date +"%Y%m%d_%H%M%S")

# 将结束时间保存到调用栈文件
echo "脚本执行结束时间：$END_TIME" >>$OUTPUT_FILE

# 显示调用栈保存的文件路径
echo "调用栈已保存到 $OUTPUT_FILE"

# 显示控制台输出文件路径
echo "控制台输出已保存到 $LOG_FILE"

# sudo lsof -i :10003
# sudo kill <PID>

# kill -SIGINT <PID>  给进程发  ctrl + c 信号
