112 lines
2.8 KiB
Bash
112 lines
2.8 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# 修复 MIPS 调试问题 - 重新编译 Debug 版本
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo " 修复 MIPS 调试问题"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "问题诊断:"
|
||
|
|
echo "- MIPS tlib 只有 Release 版本"
|
||
|
|
echo "- Release 版本没有调试符号"
|
||
|
|
echo "- 因此 GDB 无法设置断点"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "解决方案:"
|
||
|
|
echo "- 重新编译 MIPS tlib (Debug 模式)"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
read -p "是否继续编译?[y/N] " -n 1 -r
|
||
|
|
echo
|
||
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]
|
||
|
|
then
|
||
|
|
echo "已取消"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=========================================="
|
||
|
|
echo " 步骤 1: 清理旧的 Debug 目录"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
DEBUG_DIR="src/Infrastructure/src/Emulator/Cores/bin/Debug"
|
||
|
|
if [ -d "$DEBUG_DIR" ]; then
|
||
|
|
echo "清理 $DEBUG_DIR ..."
|
||
|
|
rm -rf "$DEBUG_DIR"
|
||
|
|
fi
|
||
|
|
|
||
|
|
DEBUG_OBJ_DIR="src/Infrastructure/src/Emulator/Cores/obj/Debug"
|
||
|
|
if [ -d "$DEBUG_OBJ_DIR" ]; then
|
||
|
|
echo "清理 $DEBUG_OBJ_DIR ..."
|
||
|
|
rm -rf "$DEBUG_OBJ_DIR"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=========================================="
|
||
|
|
echo " 步骤 2: 编译 MIPS tlib (Debug 模式)"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "执行: ./build.sh --external-lib-arch mips.le -d"
|
||
|
|
./build.sh --external-lib-arch mips.le -d
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=========================================="
|
||
|
|
echo " 步骤 3: 验证编译结果"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
MIPS_SO="src/Infrastructure/src/Emulator/Cores/bin/Debug/lib/translate-mips-le.so"
|
||
|
|
|
||
|
|
if [ -f "$MIPS_SO" ]; then
|
||
|
|
echo "✅ MIPS SO 文件已生成: $MIPS_SO"
|
||
|
|
|
||
|
|
# 检查调试符号
|
||
|
|
if file "$MIPS_SO" | grep -q "not stripped"; then
|
||
|
|
echo "✅ 包含调试符号 (not stripped)"
|
||
|
|
echo ""
|
||
|
|
file "$MIPS_SO"
|
||
|
|
else
|
||
|
|
echo "⚠️ 警告: SO 文件可能不包含调试符号"
|
||
|
|
echo ""
|
||
|
|
file "$MIPS_SO"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "❌ 编译失败: SO 文件未生成"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=========================================="
|
||
|
|
echo " 步骤 4: 编译 Renode 主程序 (Debug)"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
read -p "是否编译 Renode 主程序?[y/N] " -n 1 -r
|
||
|
|
echo
|
||
|
|
if [[ $REPLY =~ ^[Yy]$ ]]
|
||
|
|
then
|
||
|
|
echo "执行: ./build.sh -d"
|
||
|
|
./build.sh -d
|
||
|
|
echo "✅ Renode 主程序编译完成"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=========================================="
|
||
|
|
echo " ✅ 修复完成!"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
echo "下一步:"
|
||
|
|
echo "1. 启动 Renode: ./renode"
|
||
|
|
echo "2. 加载 MIPS 平台: machine LoadPlatformDescription @platforms/cpus/mips32_simple.repl"
|
||
|
|
echo "3. VSCode 附加调试器: F5 → 选择 'MIPS Debug'"
|
||
|
|
echo "4. 在 translate.c 打断点"
|
||
|
|
echo "5. 执行: cpu Step 1"
|
||
|
|
echo "6. 断点应该会触发了!"
|
||
|
|
echo ""
|
||
|
|
|