Skip to content

换用nodejs打开,运行一段时间后崩溃 #387

@GreenDamTan

Description

@GreenDamTan

之前用bun跑崩了(https://github.com/claude-code-best/claude-code/issues/362),现在换成nodejs也崩
话说启动的时候版本号都是2.1.888,它可以展示1.10.11这样的版本吗

 ▐▛███▜▌   Claude Code v2.1.888
▝▜█████▛▘  glm-5 · API Usage Billing
  ▘▘ ▝▝    E:\software\GAME\SoulWorker\SoulWorkerServer\SoulOfWar_Server\server

✻ Conversation compacted (ctrl+o for history)

  ⎿  Referenced file ..\..\F\_PROGRAM_HG\Source\Soulworker\GameServer\XControlServer\ControlServer.cpp
  ⎿  Read ..\..\F\_PROGRAM_HG\Source\Soulworker\GameServer\XRelayServer\ServerProcess.h (560 lines)
  ⎿  Read ..\..\F\_PROGRAM_HG\Source\Soulworker\GameServer\XControlServer\MazeInfo.cpp (227 lines)
  ⎿  Read ..\..\F\_PROGRAM_HG\Source\Soulworker\GameServer\XControlServer\MazeInfo.h (310 lines)
  ⎿  Read ..\..\F\_PROGRAM_HG\Source\Soulworker\GameServer\XControlServer\CMyRoom.cpp (94 lines)
  ⎿  Plan file referenced (C:\Users\admin\.claude\plans\streamed-gathering-hellman.md)

● 继续验证 ControlServer.exe 的 Process 类 Parse 方法。

● ida-mcp - decompile (MCP)(addr: "0x14003CAC0", port: 10001)
  ⎿  {
       "result": [
         {
     … +33 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x1400450E0", port: 10001)
  ⎿  {
       "result": [
         {
     … +16 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x140034640", port: 10001)
  ⎿  {
       "result": [
         {
     … +16 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x14004D5F0", port: 10001)
  ⎿  {
       "result": [
         {
     … +13 lines (ctrl+o to expand)

● Parse 方法的 switch 分支与 ServerProcess.h 定义一致。现在检查 ControlServer.cpp 中是否实现了 CServerProcess::Parse
  等方法。

  Searched for 4 patterns (ctrl+o to expand)

● Bash(findstr /s /n "CServerProcess::Parse CUserProcess::Parse CGMToolProcess::Parse CWorldModeProcess::Parse"
      "E:\software\GAME\SoulWorker\SoulWorkerServer\SoulOfWar…)
  ⎿  No matches found

● Process 类的 Parse 实现尚未落地。需要创建 ServerProcess.cpp 文件来实现这些方法。先检查 ServerProcess.cpp 是否存在。

  Searched for 2 patterns (ctrl+o to expand)

● Bash(dir /b "E:\software\GAME\SoulWorker\SoulWorkerServer\SoulOfWar_Server\server\src\F\_PROGRAM_HG\Source\Soulworker\
      GameServer\XControlServer\*.cpp" 2>nul)
  ⎿  Error: Exit code 2

  Read 1 file, listed 1 directory (ctrl+o to expand)

● Process cpp 文件已存在。读取验证 Parse 实现。

  Read 4 files (ctrl+o to expand)

● Parse 实现已存在且大部分匹配 IDA。但注意到 UserProcess/GMToolProcess/WorldModeProcess 中有 xPacket.XParse >> ucSub 而
  IDA 显示用 XPacket::GetSubCmd。需要验证这种差异是否有问题。

● ida-mcp - decompile (MCP)(addr: "XPacket::GetSubCmd", port: 10001)
  ⎿  {
       "result": [
         {
     … +5 lines (ctrl+o to expand)

● ida-mcp - list_functions (MCP)(pattern: "GetSubCmd", port: 10001)
  ⎿  {
       "total": 1,
       "offset": 0,
     … +9 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368915792, port: 10001)
  ⎿  {
       "result": [
         {
     … +9 lines (ctrl+o to expand)

● 发现了重要差异:IDA 中使用 XPacket::GetSubCmd() 返回 m_pRoot->ucSubCmd,而 UserProcess/GMToolProcess/WorldModeProcess
  错误地从流中读取。需要修复这些文件。

● Update(E:\software\GAME\SoulWorker\SoulWorkerServer\SoulOfWar_Server\server\src\F\_PROGRAM_HG\Source\Soulworker\GameSe
        rver\XControlServer\UserProcess.cpp)
  ⎿  Added 2 lines, removed 4 lines
      24  //   0x35 (53): ReqUserUpdateAuthType - NOT 0x34!
      25  //   0x60 (96): ReqGameServerEnterUser - NOT 0x33!
      26  bool CUserProcess::Parse(XPacket& xPacket) {
      27 -    unsigned char ucSub = 0;
      28 -    xPacket.XParse >> ucSub;
      29 -
      30 -    switch (ucSub) {
      27 +    // 对齐 IDA: 使用 GetSubCmd() 获取 subcmd,而非从流读取
      28 +    switch (xPacket.GetSubCmd()) {
      29          case 0x01: return SyncSelectCharacter(xPacket);      // IDA verified
      30          case 0x03: return SyncLogoutUser(xPacket);           // IDA: sub 0x03, NOT 0x02!
      31          case 0x04: return SyncUpdateUserMap(xPacket);        // IDA: sub 0x04, NOT 0x03!

● Update(E:\software\GAME\SoulWorker\SoulWorkerServer\SoulOfWar_Server\server\src\F\_PROGRAM_HG\Source\Soulworker\GameSe
        rver\XControlServer\GMToolProcess.cpp)
  ⎿  Added 2 lines, removed 4 lines
       7
       8  // 对齐 IDA 0x140034640: Parse - 包解析入口
       9  bool CGMToolProcess::Parse(XPacket& xPacket) {
      10 -    unsigned char ucSub = 0;
      11 -    xPacket.XParse >> ucSub;
      12 -
      13 -    switch (ucSub) {
      10 +    // 对齐 IDA: 使用 GetSubCmd() 获取 subcmd,而非从流读取
      11 +    switch (xPacket.GetSubCmd()) {
      12          case 0x01: return ReqGMUserKick(xPacket);
      13          case 0x02: return ReqGMNotice(xPacket);
      14          case 0x03: return ReqGMShutDwon(xPacket);

● Update(E:\software\GAME\SoulWorker\SoulWorkerServer\SoulOfWar_Server\server\src\F\_PROGRAM_HG\Source\Soulworker\GameSe
        rver\XControlServer\WorldModeProcess.cpp)
  ⎿  Added 2 lines, removed 4 lines
      12  //   0x07 (7): ReqWorldModeComplete
      13  //   0x09 (9): ReqWorldModeEnterList
      14  bool CWorldModeProcess::Parse(XPacket& xPacket) {
      15 -    unsigned char ucSub = 0;
      16 -    xPacket.XParse >> ucSub;
      17 -
      18 -    switch (ucSub) {
      15 +    // 对齐 IDA: 使用 GetSubCmd() 获取 subcmd,而非从流读取
      16 +    switch (xPacket.GetSubCmd()) {
      17          case 0x02: return ReqWorldModeUpdate(xPacket);
      18          case 0x06: return ReqWorldModeCommand(xPacket);
      19          case 0x07: return ReqWorldModeComplete(xPacket);

● 继续验证 ServerProcess.cpp 中其他函数实现。验证几个关键 handler。

● ida-mcp - decompile (MCP)(addr: 5368959136, port: 10001)
  ⎿  {
       "result": [
         {
     … +12 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(port: 10001, addr: 5368959472)
  ⎿  {
       "result": [
         {
     … +14 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368959840, port: 10001)
  ⎿  {
       "result": [
         {
     … +14 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368960464, port: 10001)
  ⎿  {
       "result": [
         {
     … +15 lines (ctrl+o to expand)

● ReqCreateMaze/ResCreateMaze/ReqCreateMap 实现基本匹配 IDA。ResCreateMaze 中 IDA 调用了 GetClientPtr
  但未使用返回值,这是一个可接受的差异。

  现在更新进度文档。先读取当前状态。

  Read 2 files (ctrl+o to expand)

● 继续读取进度文档末尾。

  Read 1 file (ctrl+o to expand)

● Bash(date "+%Y-%m-%d %H:%M %Z")
  ⎿  2026-04-29 14:34

  Read 2 files (ctrl+o to expand)

● 进度记录已追加。继续更新 func-index 文档。

  Read 2 files (ctrl+o to expand)

● 继续更新 type-index 文档。

  Read 1 file (ctrl+o to expand)

● ida-mcp - list_local_types (MCP)(pattern: "Process", port: 10001)
  ⎿  Error: 1 validation error for call[list_local_types]
     pattern
       Unexpected keyword argument [type=unexpected_keyword_argument, input_value='Process', input_type=str]
         For further information visit https://errors.pydantic.dev/2.13/v/unexpected_keyword_argument

● ida-mcp - list_local_types (MCP)(port: 10001)
  ⎿  {
       "total": 0,
       "items": []
     }

● ida-mcp - get_struct_info (MCP)(name: "CServerProcess", port: 10001)
  ⎿  {
       "name": "CServerProcess",
       "kind": "struct",
     … +12 lines (ctrl+o to expand)

● ida-mcp - get_struct_info (MCP)(name: "CUserProcess", port: 10001)
  ⎿  {
       "name": "CUserProcess",
       "kind": "struct",
     … +12 lines (ctrl+o to expand)

● ida-mcp - get_struct_info (MCP)(port: 10001, name: "CGMToolProcess")
  ⎿  {
       "name": "CGMToolProcess",
       "kind": "struct",
     … +12 lines (ctrl+o to expand)

● ida-mcp - get_struct_info (MCP)(name: "CWorldModeProcess", port: 10001)
  ⎿  {
       "name": "CWorldModeProcess",
       "kind": "struct",
     … +12 lines (ctrl+o to expand)

● Process 类类型信息获取完毕。追加 type-index 文档。

  Read 1 file (ctrl+o to expand)

● 继续更新 path-recovery-index 文档。

  Read 2 files (ctrl+o to expand)

● 四份文档已更新。继续验证 CServer 核心方法。

● ida-mcp - decompile (MCP)(addr: "0x140042550", port: 10001)
  ⎿  {
       "result": [
         {
     … +61 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(port: 10001, addr: "0x140041180")
  ⎿  {
       "result": [
         {
     … +15 lines (ctrl+o to expand)

● 验证现有 CServer::OnUpdate 和 CServer::RegisterProcess 实现。

  Read 1 file (ctrl+o to expand)

● CServer 实现已经匹配 IDA。继续验证 UserProcess handler。

● ida-mcp - decompile (MCP)(addr: "0x140045310", port: 10001)
  ⎿  {
       "result": [
         {
     … +15 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x1400454B0", port: 10001)
  ⎿  {
       "result": [
         {
     … +16 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x1400455D0", port: 10001)
  ⎿  {
       "result": [
         {
     … +11 lines (ctrl+o to expand)

  Read 1 file (ctrl+o to expand)

● UserProcess 实现已验证匹配 IDA。继续验证 GMToolProcess handler。

● ida-mcp - decompile (MCP)(addr: "0x140034730", port: 10001)
  ⎿  {
       "result": [
         {
     … +12 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x1400347C0", port: 10001)
  ⎿  {
       "result": [
         {
     … +12 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(port: 10001, addr: "0x140034850")
  ⎿  {
       "result": [
         {
     … +12 lines (ctrl+o to expand)

● GMToolProcess handler 实现已验证与 IDA decompile 匹配。现在验证 WorldModeProcess handler。

● ida-mcp - decompile (MCP)(addr: 5369026176, port: 10001)
  ⎿  {
       "result": [
         {
     … +53 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5369027312, port: 10001)
  ⎿  {
       "result": [
         {
     … +15 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5369027616, port: 10001)
  ⎿  {
       "result": [
         {
     … +12 lines (ctrl+o to expand)

● WorldModeProcess handler 实现验证通过。继续验证 ControlServer.cpp 关键函数。

● ida-mcp - list_functions (MCP)(count: 20, offset: 0, port: 10001, pattern: "XControlServer")
  ⎿  {
       "total": 243,
       "offset": 0,
     … +49 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x14000C220", port: 10001)
  ⎿  {"result":[{"query":"0x14000C220","name":"?AddUser@XControlServer@@QEAA_NPEAVCServer@@AEAUSTCharInfo@@TUXMapID
     @@KE_JE@Z","start_ea":"0x14000C220","end_ea":"0x14000C602","decompiled":"// Hidden C++ exception states: #wind
     =5\nchar __fastcall XControlServer::AddUser(\n        XControlServer *this,\n        CServer *pServer,\n
     … +95 lines (ctrl+o to expand)

● AddUser 反编译得到详细逻辑。验证现有实现是否匹配。

  Read 1 file (ctrl+o to expand)

● AddUser 已实现。继续验证其他关键函数如 RemoveUser。

● ida-mcp - decompile (MCP)(addr: 536847632, port: 10001)
  ⎿  {
       "result": [
         {
     … +5 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x14000C610", port: 10001)
  ⎿  {
       "result": [
         {
     … +71 lines (ctrl+o to expand)

● RemoveUser 实现已验证。继续验证 WorldManager 关键函数。

● ida-mcp - list_functions (MCP)(count: 20, offset: 0, pattern: "CWorldManager", port: 10001)
  ⎿  {
       "total": 57,
       "offset": 0,
     … +44 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368720544, port: 10001)
  ⎿  {"result":[{"query":"5368720544","name":"?ReqEnterMap@CWorldManager@@QEAA_NPEAVCServer@@AEAUPS_ENTER_MAP_REQ@@
     @Z","start_ea":"0x140002CA0","end_ea":"0x140003D00","decompiled":"// Hidden C++ exception states: #wind=15\n__
     int64 __fastcall CWorldManager::ReqEnterMap(CWorldManager *this, CServer *pServer, PS_ENTER_MAP_REQ *stEnterRe
     … +252 lines (ctrl+o to expand)

● 已完成大量函数验证。继续更新文档并验证更多核心函数。先更新进度日志添加详细验证统计。

● Bash(date "+%Y-%m-%d %H:%M %Z")
  ⎿  2026-04-29 14:41

  Read 1 file (ctrl+o to expand)

● 继续验证更多函数。验证 WorldManager 的 AddMap 和 DeleteMap。

● ida-mcp - decompile (MCP)(addr: "0x1400027A0", port: 10001)
  ⎿  {
       "result": [
         {
     … +88 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "0x140002B70", port: 10001)
  ⎿  {
       "result": [
         {
     … +61 lines (ctrl+o to expand)

● 继续验证 WorldManager.cpp 的实现。

  Read 1 file (ctrl+o to expand)

● WorldManager::AddMap/DeleteMap 已验证匹配 IDA。继续验证 ServerProcess 中未验证的 handler。

● ida-mcp - decompile (MCP)(addr: 5368960736, port: 10001)
  ⎿  {
       "result": [
         {
     … +12 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368962208, port: 10001)
  ⎿  {
       "result": [
         {
     … +13 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368962320, port: 10001)
  ⎿  {
       "result": [
         {
     … +11 lines (ctrl+o to expand)

● ServerProcess handler 验证通过。追加更多验证记录到 func-index。

  Read 1 file (ctrl+o to expand)

● 继续验证更多 ControlServer 核心函数。

● ida-mcp - list_functions (MCP)(port: 10001, pattern: "CChannelOfMap", count: 20)
  ⎿  {
       "total": 62,
       "offset": 0,
     … +45 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368713216, port: 10001)
  ⎿  {
       "result": [
         {
     … +77 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368713664, port: 10001)
  ⎿  {
       "result": [
         {
     … +15 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: 5368713840, port: 10001)
  ⎿  {
       "result": [
         {
     … +15 lines (ctrl+o to expand)

● CChannelOfMap 函数验证通过。继续验证更多函数并更新文档。

  Read 1 file (ctrl+o to expand)

● 继续验证 CMapWithChannel 核心函数。

● ida-mcp - decompile (MCP)(addr: "5368717104", port: 10001)
  ⎿  {
       "result": [
         {
     … +25 lines (ctrl+o to expand)

● ida-mcp - decompile (MCP)(addr: "5368716784", port: 10001)
  ⎿  {
       "result": [
         {
     … +10 lines (ctrl+o to expand)

● 继续验证更多核心函数。

● ida-mcp - list_functions (MCP)(count: 30, pattern: "CUserObject", port: 10001)
  ⎿  {"total":237,"offset":0,"count":30,"items":[{"name":"??B?$shared_ptr@VCUserObject@@@tr1@std@@QEBAPEQ_Bool_stru
     ct@2@HXZ","start_ea":"0x140006190","end_ea":"0x1400061C3"},{"name":"??1?$_Ref_count@VCUserObject@@@tr1@std@@UE
     AA@XZ","start_ea":"0x140009790","end_ea":"0x1400097A8"},{"name":"?SetPartyInfo@CUserObject@@QEAAXAEAUST_PARTY_
     … +132 lines (ctrl+o to expand)

● 已验证大量核心函数。追加最终进度记录。

● Bash(date "+%Y-%m-%d %H:%M %Z")
  ⎿  2026-04-29 14:48

● Reading 1 file… (ctrl+o to expand)
  ⎿  $ cat >> "E:/software/GAME/SoulWorker/SoulWorkerServer/SoulOfWar_Server/server/src/docs/ControlServer.exe-current-t
     arget-progress.md" << 'EOF'
     ---
     [2026-04-29 14:48 +08:00] [glm-5]
     - 本轮处理:验证 ControlServer.exe CChannelOfMap 和 CMapWithChannel 核心函数
     - 完成验证函数:
     - **CChannelOfMap::AddUserCount** @ 0x14000…

✶ Cogitating… (2h 20m 32s · ↑ 15.9k tokens)
  ⎿  Target: 171.1k / 32.0m (1%) · ~18d
  ⎿  Tip: Use /clear to start fresh when switching topics and free up context

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ 
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  ⏵⏵ bypass permissions on (shift+tab to cycle) · esc to interrupt             4% until auto-compact · /model opus[1m]

<--- Last few GCs --->

[13680:00000244A9917000]  8439571 ms: Scavenge (interleaved) 4084.2 (4097.8) -> 4082.9 (4102.1) MB, pooled: 0 MB, 4.75 / 0.02 ms  (average mu = 0.313, current mu = 0.002) allocation failure;
[13680:00000244A9917000]  8440214 ms: Mark-Compact (reduce) 4087.0 (4102.3) -> 4084.9 (4097.6) MB, pooled: 0 MB, 318.21 / 0.02 ms  (+ 137.7 ms in 62 steps since start of marking, biggest step 5.0 ms, walltime since start of marking 491 ms) (average mu = 0
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
----- Native stack trace -----

 1: 00007FF760B2C36F node::OnFatalError+1343
 2: 00007FF761774D77 v8::Function::NewInstance+423
 3: 00007FF761575467 v8::base::AddressSpaceReservation::AddressSpaceReservation+322071
 4: 00007FF761573106 v8::base::AddressSpaceReservation::AddressSpaceReservation+313014
 5: 00007FF76158D7BA X509_STORE_set_cleanup+5098
 6: 00007FF761599618 uv_timer_set_repeat+19096
 7: 00007FF7615B0FBC uv_timer_set_repeat+115772
 8: 00007FF7615B1120 uv_timer_set_repeat+116128
 9: 00007FF7615A8D13 uv_timer_set_repeat+82323
10: 00007FF7615A8A24 uv_timer_set_repeat+81572
11: 00007FF76124F6E8 EC_KEY_METHOD_set_verify+426856
12: 00007FF76124DD1D EC_KEY_METHOD_set_verify+420253
13: 00007FF76124D987 EC_KEY_METHOD_set_verify+419335
14: 00007FF76124F82B EC_KEY_METHOD_set_verify+427179
15: 00007FF76124DD1D EC_KEY_METHOD_set_verify+420253
16: 00007FF76124D987 EC_KEY_METHOD_set_verify+419335
17: 00007FF761252881 EC_KEY_METHOD_set_verify+439553
18: 00007FF76124EEC0 EC_KEY_METHOD_set_verify+424768
19: 00007FF76124DEF6 EC_KEY_METHOD_set_verify+420726
20: 00007FF76124D987 EC_KEY_METHOD_set_verify+419335
21: 00007FF761252881 EC_KEY_METHOD_set_verify+439553
22: 00007FF76124EEC0 EC_KEY_METHOD_set_verify+424768
23: 00007FF76124DEF6 EC_KEY_METHOD_set_verify+420726
24: 00007FF76124D987 EC_KEY_METHOD_set_verify+419335
25: 00007FF76124D889 EC_KEY_METHOD_set_verify+419081
26: 00007FF761782842 v8::ValueDeserializer::ReadValue+290
27: 00007FF760AAF3D4 node::MultiIsolatePlatform::DisposeIsolate+195044
28: 00007FF760AB9D1B node::MultiIsolatePlatform::DisposeIsolate+238379
29: 00000244E17CF77E

Metadata

Metadata

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions