tools: harden task3 session debug scripts

This commit is contained in:
BruceChen 2026-04-12 19:57:54 +08:00
parent 0519eac4a8
commit e0752d8d98
3 changed files with 78 additions and 14 deletions

View file

@ -44,11 +44,47 @@ FILE_INPUT=false
while [[ $# -gt 0 ]]; do
case "$1" in
-v|--version) VERSION="$2"; shift 2 ;;
-m|--mode) MODE="$2"; shift 2 ;;
-p|--port) PORT="$2"; PORT_SET_BY_USER=true; shift 2 ;;
--session) SESSION="$2"; shift 2 ;;
--username) USERNAME="$2"; shift 2 ;;
-v|--version)
if [[ $# -lt 2 ]]; then
echo "$1 requires a value" >&2
exit 1
fi
VERSION="$2"
shift 2
;;
-m|--mode)
if [[ $# -lt 2 ]]; then
echo "$1 requires a value" >&2
exit 1
fi
MODE="$2"
shift 2
;;
-p|--port)
if [[ $# -lt 2 ]]; then
echo "$1 requires a value" >&2
exit 1
fi
PORT="$2"
PORT_SET_BY_USER=true
shift 2
;;
--session)
if [[ $# -lt 2 ]]; then
echo "--session requires a value" >&2
exit 1
fi
SESSION="$2"
shift 2
;;
--username)
if [[ $# -lt 2 ]]; then
echo "--username requires a value" >&2
exit 1
fi
USERNAME="$2"
shift 2
;;
--no-build) DO_BUILD=false; shift ;;
--debug-on) DEBUG_ON=true; shift ;;
--file-input) FILE_INPUT=true; shift ;;
@ -183,7 +219,7 @@ if [[ "$MODE" == "tui" ]]; then
# TUI mode: needs a real tty - no pipes or redirects allowed
tmux kill-session -t "$MCC_TMUX_SESSION" 2>/dev/null || true
tmux new-session -d -s "$MCC_TMUX_SESSION" -x 160 -y 50 \
"cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- ${MCC_ARGS[*]}; echo '=== MCC EXITED ==='; sleep 600"
"cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- $MCC_ARGS_CMD; echo '=== MCC EXITED ==='; sleep 600"
echo ""
echo " TUI mode started in tmux session '$MCC_TMUX_SESSION'"
echo " (TUI mode uses a real terminal; log file is not available, use MCC's /debug command)"
@ -243,7 +279,7 @@ else
# Interactive classic mode: run in tmux (no pipe - ConsoleInteractive also needs tty)
tmux kill-session -t "$MCC_TMUX_SESSION" 2>/dev/null || true
tmux new-session -d -s "$MCC_TMUX_SESSION" -x 160 -y 50 \
"cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- ${MCC_ARGS[*]}; echo '=== MCC EXITED ==='; sleep 600"
"cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- $MCC_ARGS_CMD; echo '=== MCC EXITED ==='; sleep 600"
echo ""
echo " Classic mode started in tmux session '$MCC_TMUX_SESSION'"
echo ""

View file

@ -210,7 +210,7 @@ mcc-kill() {
done
session="$(_mcc_resolve_session "$session")"
local pid_file meta_file tmux_session pid
local pid_file meta_file tmux_session pid pid_comm pid_args
local killed=false
pid_file="$(_mcc_session_pid_file "$session")"
meta_file="$(_mcc_session_meta_file "$session")"
@ -219,9 +219,15 @@ mcc-kill() {
if [[ -f "$pid_file" ]]; then
pid="$(tr -cd '0-9' < "$pid_file")"
if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then
kill "$pid" 2>/dev/null || true
echo "Killed MCC PID $pid for session '$session'"
killed=true
pid_comm="$(ps -p "$pid" -o comm= 2>/dev/null | tr -d '[:space:]')"
pid_args="$(ps -p "$pid" -o args= 2>/dev/null || true)"
if [[ "$pid_comm" == "MinecraftClient" ]] || { [[ "$pid_comm" == "dotnet" ]] && [[ "$pid_args" == *"MinecraftClient"* ]]; }; then
kill "$pid" 2>/dev/null || true
echo "Killed MCC PID $pid for session '$session'"
killed=true
else
echo "Refusing to kill PID $pid for session '$session': unexpected process '$pid_comm'"
fi
else
echo "No live MCC PID found for session '$session' (pid file: $pid_file)"
fi

View file

@ -18,9 +18,31 @@ SERVER_ONLY=false
while [[ $# -gt 0 ]]; do
case "$1" in
--session) SESSION="$2"; shift 2 ;;
--server) SERVER_VER="$2"; shift 2 ;;
--server-only) SERVER_ONLY=true; SERVER_VER="$2"; shift 2 ;;
--session)
if [[ $# -lt 2 ]]; then
echo "--session requires a value" >&2
exit 1
fi
SESSION="$2"
shift 2
;;
--server)
if [[ $# -lt 2 ]]; then
echo "--server requires a value" >&2
exit 1
fi
SERVER_VER="$2"
shift 2
;;
--server-only)
if [[ $# -lt 2 ]]; then
echo "--server-only requires a value" >&2
exit 1
fi
SERVER_ONLY=true
SERVER_VER="$2"
shift 2
;;
-h|--help)
echo "Usage: tools/mcc-log-tail.sh [--session NAME] [--server VER] [--server-only VER]"
exit 0 ;;