跳到主要内容

故障排查

如何正确地反馈问题:​

如果你想提出建议、报告缺陷或故障,或者需要「实时」的帮助与支持,随时可以到这里提交。点击绿色的 New issue 按钮并填写表单即可。

如果问题的描述尽可能详尽,开发者会非常感激:

  • 你的操作系统版本; HLDS 服务器的版本(构建号),或 ReHLDS 的版本;
  • 你的游戏(或模组)版本;
  • Metamod-r 的版本(构建号或构建日期);
    • 可以顺带附上模块列表(在服务器控制台输入 meta list 获取)。
  • 附上日志;
  • 附上崩溃转储;

这有助于更彻底地分析,并在日后尽可能修复你遇到的问题。


获取 HLDS\reHLDS 的崩溃转储​

主要来源(俄语). 镜像(俄语).

请不要把转储直接发到公开网络上,它们通常包含服务器的完整信息,包括 rcon 等等。传输时可以打包成带密码的压缩包,这样做还有一个好处:转储的压缩率很高。

Windows​

使用 WER(Windows 错误报告):​

  • 启用 WER(错误报告):
  • Vista 之前的系统:
  • 运行 drwtsn32.exe,在 Crash Dump File 旁选择 "Full"。在这里还可以查看(或设置)转储的保存位置。
  • Vista 及更高版本:
  • 编辑注册表,这是来自 s1lent 的便捷方法:

面向新手的注册表配置详解,快速拿到转储。​

  • 设置项:
  • NAME_APP - hlds.exe
  • 崩溃时需要生成转储的应用程序名称。
  • REG_LINK - HKLM\Software\Microsoft\Windows\Windows Error Reporting
  • Windows 错误报告项的路径(这一项多半不需要改动,我认为各版本 Windows 的路径都一样)
  • DumpType - 2
  • 0 —— 普通转储
  • 1 —— 最小转储
  • 2 —— 完整转储
  • DumpCount - 15
  • 要保留的转储数量;当目录中的转储数超过该值时,会删除旧的转储以便生成新的。
  • DumpFolder - C:\CrashDumps
  • 转储的保存目录路径。
  • (为避免出问题,路径中不要使用空格或西里尔字母)
  • 安装步骤:
  • 下载压缩包并解压。

  • 运行 add_RegistryDumps.bat

  • 写入注册表之后,务必确认 Windows 错误报告服务已启用。

  • 然后按下 Windows + R 组合键(Windows 键位于 ctrl 和 alt 之间),也可以调用 cmd.exe 或「开始 - 运行」,随后输入 gpedit.msc,接着参照截图操作。

计算机配置 -> 管理模板 -> Windows 组件 -> Windows 错误报告

使用 userdumps 工具​

  • 来自 unKn0wn 的说明:

使用微软提供的工具获取转储的方法: UserModeProcessDumper \ 镜像:"UserModeProcessDumper8_1_2929_5.zip".

感谢 Lev 提供的设置方案。

1. 安装​

解压下载到的压缩包(默认路径为 C:\kktools\userdump8.1)。

  • 从以下目录运行 setup.exe:
  • 如果使用 32 位的 Windows XP/2003,则为 C:\kktools\userdump8.1\x86。
  • 如果使用 64 位的 Windows XP/2003,则为 C:\kktools\userdump8.1\x64。
  • 在安装向导窗口中点击 Next。
  • (仅限 32 位系统)在 Terminate Mode 窗口中选择 Disable "Dump on Process Termination" feature,然后点击 Next。

  • 点击 Finish 并等待安装完成。 在 User Mode Process Dump Setup 窗口中点击 YES 按钮(如果你不清楚如何进入 userdump 的设置界面,随时可以在「控制面板 - Process Dumper」中找到)。
2. 添加应用程序​

在打开的 Properties: User Mode Process Dumper Setup 窗口中点击 New,添加目标程序名称,例如 hlds.exe(扩展名必须写!),然后点击 OK

3. 设置​

在 Properties: User Mode Process Dumper Setup 窗口中找到刚创建的应用规则,选中它并点击 Rules 按钮 在打开的 Process Monitoring Ruless for hlds.exe 窗口中

  1. 选择 Use custom rules。
  2. 如有需要,修改转储的保存目录。
  3. 在 Exception Codes 中(用左键)勾选以下代码:"Access Violation、Overflow、Illegal Instruction、Stack overflow"。
  4. 把 Save Mode 参数设为 Cyclic saving(5 次)。 最终大致是这样:

附注:建议与转储类型设为 "Brief" 的 Dr Watson 搭配使用,因为后者会以文本格式保留日志,便于你挑出需要的转储;而 userdump 负责生成完整转储。

Linux​

服务器必须使用 -debug 参数启动。

如果系统中安装了 gdb,错误的明确信息会自动写入 debug.log 文件,因此建议安装它(命令取决于所用系统,在 Debian\Ubuntu 上是 apt install gdb)。虽然生成转储并不强制要求它,但只要条件允许就应该装上:崩溃位置会被写入 debug.log,让你立刻对错误有所判断。若要在另一台机器上从转储文件中获得同样的信息,则需要服务器上的全部二进制文件。

默认情况下转储文件名为 core,写入工作目录,因而会被覆盖。为避免这一点,可以把进程 ID 加入文件名:

echo 1 > /proc/sys/kernel/core_uses_pid

或者把转储写入 /tmp:

echo /tmp/%e-%t-%p-%c.dmp > /proc/sys/kernel/core_pattern 更多信息见here.

不使用 sudo 启动(以 root 身份,否则需要把系统全局设置改为 unlimited):

ulimit -c unlimited && ./hlds_run -debug ...

使用 sudo 启动(以 hlds 用户身份):

ulimit -Hc unlimited && sudo -u hlds sh -c "ulimit -Sc unlimited && ./hlds_run -debug ..."

检查 sudo 下的启动情况:

ulimit -Hc unlimited && sudo -u hlds sh -c "ulimit -Sc unlimited && whoami && ulimit -Sc && ./hlds_run -debug ..."

会显示启动所用的用户名和转储创建上限,随后启动服务器。

要验证转储设置,可以使用一个专门开发的模块: FixItAll \ FixItAll mirror or Crash.sma*.


汇总表:​

Folder —— 你的模组或游戏所在目录。在 and 两列中给出的是位于「你的模组或游戏」目录下 dlls 文件夹中的可执行文件名。

❌ —— 该平台不存在对应版本

游戏 \ 模组目录
Action Half-Lifeactionahl.dllahl.so
Adrenaline Gameragag.dllag.so
openAGagag.dllag.so
Azure Sheepasheephl.dll❌
Base Defensebdefserver.dllserver.so
The Battle Groundsbgbg.dllbg.so
Brutal Half-Lifebhlbhl.dll❌
Brain Breadbrainbreadbb.dll❌
Half-Life: Blue Shiftbshifthl.dllbshift.so
Bumper Carsbumpercarshl.dll❌
BuzzyBotsbuzzybotsbb.dll❌
Chicken Fortress 3ckf3mp.dll❌
Counter-Strike 1.0cs10mp.dll❌
Counter-Strike 1.5csv15mp.dll❌
Counter-Strike 1.6cstrikemp.dllcs.so
Counter-Strike:Condition Zeroczeromp.dllcs.so
Counter-Strike:Condition Zero Deleted Scenesczerorcz.dllcz.so
Desert Crisisdcrisisdc.dlldc.so
Half-Life: Decaydecaydecay.dll❌
Deathmatch Classicdmcdmc.dlldmc.so
Day of Defeatdoddod.dlldod.so
Digital Paintballdpbpb.dllpb.i386.so
Earth's Special Forces (Old)esfhl.dllhl.so(位于 linuxdll,而非 dlls 目录)
Earth's Special Forcesesfhl.dllhl.so
Existenceexistenceexistence.dll❌
Firearmsfirearmsfirearms.dll❌
Frontline Forcefrontlinefrontline.dllfront.so
Gangsta Warsgangstawarsgwars27.dll❌
Gangwarsgangwarsmp.dll❌
Opposing Forcegearboxopfor.dllopfor.so
Global Warfareglobalwarfaremp.dllgw.so
Goldeneyegoldeneyemp.dll❌
Headcrab Frenzyhcfrenzyhcfrenzy.dllhcfrenzy.so
Half-Life 1.5: Weapon Editionhl15wehl.dllhl.so
HL-Rallyhlrallyhlrally.dllhlr.so
Holy Warsholywarsholywars.dllhl.so
Hostile Intenthostileintenthl.dllhl.so
International Online Socceriosios.dllios.so
Judgementjudgedmmp.dlljudge.so
Kanonballkanonballkanonball.dllhl.so
Monkeystrikemonkeystrikemonkey.dllms.so
Morbid InclinationMorbidPRmorbid.dllmorbid.so
Move In!moveinhl.dllhl.so
Master Sword Continuedmscms.dll❌
Natural Selectionnsns.dllns.so
Natural Selection Betanspns.dllns.so
Over Groundogog.dllog.so
Outlawsmodolhl.dllol.so
Operations 1942ops1942spirit.dllspirit.so
Open-Source Jailbreakosjbjail.dllosjb.so
Out Breakoutbreakhl.dll❌
Oz Deathmatchozmp.dllmp.so
Paintballpaintballmp.dllpb.so
Public Enemypenemype.dllpe.so
Point of No Returnponreturnmp.dllponr.so
Pirates, Vikings and Knightspvkhl.dllhl.so
Rocket Crowbar 2rc2rc2.dllrc2.so
Resident Evil : Cold Bloodrecbb2recb.dllrecb.so
Gunman Chroniclesrewolfgunman.dll❌
Ricochetricochetmp.dllricochet.so
Rocket Crowbarrockcrowbarrc.dllrc.so
Rival Speciesrspecieshl.dllhl.so
Scientist Huntscihuntshunt.dllshunt.so
The Shipshipship.dllship.so
Science & Industrysisi.dllsi.so
Snow-Warsnowsnow.dllsnow.so
StargateTC (Old, 1.x)stargatetchl.dllhl.so
StargateTC (Updated, 2.x)stargatetchl.dllstc.so
StargateTC (Updated, 2.x)stargatetchl.dllstc_i386_opt.so
Sven Coop (Old)svencoophl.dllhl.so
Sven Coop (Steam)svencoopserver.dllserver.so
Swarmswarmswarm.dllswarm.so
Team Fortress Classictfctfc.dlltfc.so
The Wastesthewastesthewastes.dllthewastes.so
Project Timelesstimelesstimeless.dllpt.so
Tour of Dutytodhl.dllhl.so
Train Hunterstrainhuntersth.dllth.so
The Specialiststsmp.dllts.so
The Trenchestttt.dlltt.so
Underworld Bloodlineunderworlduw.dlluw.so
Half-Lifevalvehl.dllhl.so
VampireSlayervsmp.dllvs.so
Wanted!wantedhlwanted.dllhl.so
Wizard Wars (Steam)wizardwarswizardwars.dllwizardwars.so
Wizard Wars Beta (Steam)wizardwars_betawizardwars.dllwizardwars.so
Wizard Wars (Old)wizwarsmp.sohl.dll
WormsHLwormshlwormshl.dllwormshl.so
Zombie Paniczpmp.dllhl.so

欢迎对本项目提供任何形式的帮助与贡献。测试和反馈越多,Metamod-r 及相关产品的发展就越有力。祝顺利!