排障
本页先讲编译和启动失败,再讲如何提交有用的崩溃报告。若还没跑起来,先看 从零到一个能连上的 MUD 或 LLM 约定。
编译
CMake 找不到 ICU、OpenSSL、PCRE、jemalloc、MySQL、SQLite 或 PostgreSQL。
按 构建指南 安装对应 -dev / Homebrew / MSYS2 包,装完后清空 build/ 再跑 CMake。
CMake 太旧。 需要 3.22+。Ubuntu 22.04+ 即可。
WSL 极慢。 树必须在 Linux 文件系统(~/fluffos),不要 /mnt/c/...。
Windows 上 crypto / MySQL 报错。 文档里的 MSYS2 开关会关掉它们:
-DPACKAGE_CRYPTO=OFF -DPACKAGE_DB_MYSQL="" -DPACKAGE_DB_SQLITE=1。
启动与连接
这些针对你选定的 mudlib。不要为了「修好启动」去跑 testsuite/,除非你在改驱动。
Bad mudlib directory。 进程 cwd 和 mudlib directory 对不上。配置写 ./ 时,从该 lib 根目录启动:
cd /path/to/mudlib
/path/to/fluffos/build/bin/driver CONFIG_FILE
端口占用 / Address already in use。 该 lib 配置里的端口已被占用。不要同时跑两个驱动。
打印版本后立刻退出。 看控制台和这份 lib 的日志目录。常见原因:找不到 master、master 编译失败、include directories 写错。
Telnet 连上立刻断开。 master::connect() 克隆 login 对象失败。同一份日志。
网页是空的。 确认打开的是该 lib 文档写明的 websocket / HTTP 端口,不是纯 telnet 口。
若你在跑驱动测试套件
testsuite/etc/config.test 的 mudlib 是 ./,端口 4000–4003:
cd testsuite
../build/bin/driver etc/config.test
日志:testsuite/log/debug.log。内置网页客户端:4001,websocket http dir 指向 ../src/www。
消毒器与 Valgrind
随机崩溃多半是更早的内存破坏。Linux 上优先用 Clang + AddressSanitizer + UBSan:
export CC=clang CXX=clang++
cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_SANITIZER=ON ..
make -j"$(nproc)" install
Ubuntu 还需要 libdw-dev libbz2-dev。Valgrind 更慢,只在不能跑 ASan 时再用。不要把 Valgrind 当默认第一步。
提交 Issue
到 GitHub Issues,务必包含:
- 启动时打印的版本行(
master提交或 tag) - 操作系统与编译器
- 完整控制台和
debug.log片段,不要转述 - 能复现的最小 LPC(如有)
- 内存问题:Debug 消毒器构建的 ASan/UBSan 日志