• Check out the results of the Techtree Contest #19!
  • Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!

Crash Protector (prevent wc3 from crashing)

This bundle is marked as pending. It has not been reviewed by a staff member yet.
CrashProtector v1.2.0 by Tomotz

This tool prevents some (hopefully most or all) wc3 crashes. It can also help debugging crashes and freezes.
Everything you need to know to use it for crash prevention is in the CrashProtector tab. The rest of the tabs has debugging information and advanced info for anyone interested.


CrashProtector

Advanced Info

Debugging

Testing


Installation:
Copy Wc3Utils/CrashProtector/version.dll at main · Tomotz/Wc3Utils and Wc3Utils/PdbPorter/symbols.txt at main · Tomotz/Wc3Utils from my github to your wc3 folder:
C:\Program Files (x86)\Warcraft III\_retail_\x86_64
If it's not there, open battle.net app and press the settings wheel -> Show in explorer and navigate to _retail_\x86_64
To validate that you put the files in the correct location, run wc3, then see that a log file was created in ...\Documents\CrashProtector

Note 1:
The symbols.txt file is paired with a version of the wc3 executable. Whenever there is a new patch, this file will break and need to be updated. It is only required for debugging, and not for the crash protection though.

Note 2:
if the files gets flagged by windows defender, you can do:
  1. Open Windows Security
  2. Go to Virus & threat protection
  3. Click Protection history
  4. Find the blocked version.dll/symbols.txt
  5. Click Allow on device
The files are virus free, I built them myself. You can also build them yourself with the instructions in the advanced tab.

Change Log:

Symbols updated to wc3 patch 2.0.4.23745

### v1.3.1
  • Remove wrong register argument values from stacktrace - only leave values at top of the stack, and stack relative arguments.
  • Fix stack argument value calculations.

### v1.3.0
  • Skip default log file (crash_protector.log) and hang detection when loaded by World Editor
  • Support recovery from non-AV exceptions (division by zero, illegal instruction, etc.) — decodes and skips the faulting instruction, or simulates a ret as fallback
  • When the same crash is prevented multiple times, it will be skipped from the log (and only a counter of the amount of times it was prevented is shown)
### v1.2.0
  • Better support for register and argument prints


What bugs can/can't this prevent:
There are a few main reasons that players drop undesirably from games:
- Network disconnects - there was no connectivity between host and client and game drops the player. This used to be mitigate in classic by the 45 seconds grace period before a player is kicked, but no longer. I think these looks like the player just exits to scoreboard window.
- Desync - there is a difference between players in how they see the game state (some unit exist for one player and not the other). Game notices and desyncs one of the players to avoid inconsistency. If a desync happened, you will see a desync log under \Documents\Warcraft III\Errors
- Crashes - error in the application caused the game to crash and close. When these happen you will see a Crash log under \Documents\Warcraft III\Errors that will also state the reason for the crash.
- Freezes - A very heavy compute is causing the application to hang. Can be an infinite loop, or just a very very long one that is intensive enough to make the process. When this happens the game window will freeze, and windows will offer to restart it.

In this project we try to avoid crashes and make crashes and freezes more informative (allowing you to classify them, and possibly even understand what caused them).
This project only handles freezes and crashes. It will not solve or log any desync or network disconnect.

Crash protection:
Intercepts any type of exceptions and tries to recover:
  • Detecting when the game tries to read/write/execute invalid memory addresses
  • For reads: returning 0 to the destination register
  • For writes: discarding the write operation (nop)
  • For execute (DEP): simulating a return to the caller
  • Advancing past the faulting instruction to continue execution
  • For any other type of exception, we try to just skip the instruction and continue execution.

Hang detection:
A watchdog thread monitors the game's main thread and logs diagnostics (all thread stacks) when it stops responding.

Logging:
All crashes and hangs are logged to Documents\CrashProtector\crash_protector.log with register dumps, and module info. If symbols are available (symbols.txt file), will also generate stack traces and function args. Notification balloons appear on the 1st and 20th saved crash, and when a hang is detected to let the user know.
Only truly unhandled exceptions are caught — the game's own exception handlers (__try/__except) run first and are not interfered with.

Installation:
All the code is open source and can be found in my github: GitHub - Tomotz/Wc3Utils: Gerenric utilities for wc3 lua maps
You can find a readme in CrashProtector and in PdbPorter with any instructions you need on how to build and generate the files yourself.

Note:
this is a very hacky mitigation for crashes. Skipping faulting instructions leaves the program in a potentially inconsistent state, and might lead to later errors, but it is tested and prevents real crashes in practice. It is not expected to cause any issue when no crashes were encountered.


Crash info:
When the first crash/freeze is encountered, a balloon notification appears pointing you to the log created with all the information on the issue.
The tool creates 2 logs - Documents\CrashProtector\crash_protector.log is created whenever wc3 is opened. Documents\CrashProtector\crash_<time>.log is created when the first crash/freeze happens. They will have the exact same format.
Each crash will have the accessed address and current RIP (instruction pointer). It will have the exe/dll where the access happened and the offset it will also have the values of the registers at that time. For hangs, we print this info for the main program thread, and the RIP for all threads.
If symbols are available, the stacktrace will also be printed along with the function argument names values.

Symbols:
My Github GitHub - Tomotz/Wc3Utils: Gerenric utilities for wc3 lua maps contains all the information for this in PdbPorter instruction.txt.
The symbols file is matched with an executable, as it needs the exact addresses of the functions. It is very partial, but has enough info to let you understand where the crash happened in the code and sometimes even why.

Testing was done in the attached map. The tool managed to prevent crashes in single player and with 2 players, and the game managed to continue after that. It also prevented multiple crashes in real game scenario, where the game managed to continue for a long time with no issues.
You can enter -c to trigger a crash - a unit is created, moved outside the map boundaries and then ordered to attack.
This is not a great crash to test the feature with, since in real game scenario, it always lead to a freeze.
It seems that if no one does anything (no units are moved or touched) this leads to multiple access violations (the first of which crashes the game). With the tool, you can see that the game doesn't crash and the logs are populated. You can continue playing normally after this, and everything seems to be working. If you do move the unit right after triggering the crash, or sometimes just when you trigger the crash multiple times, you get a freeze. You can see the Hang logs in that case.
This crash was used because I didn't know of any better crash that I can test with it. It was not cherry-picked, it was the only thing I tried.
The output of a run from my map with both the prevented crash and the hang (I removed many of the access violations because they all look pretty much the same. Each crash triggered leads to multiple access violations):

Code:
[InitSymbols] symbols.txt: 104894 funcs, 166038 params, 8558125 string bytes
[InitSymbols] symbols.txt loaded: 104894 funcs, 166038 params
[18:45:24.727] === CrashProtector loaded (PID 15316, symbols=YES) ===
[18:45:24.727] Ready - monitoring for invalid pointer access violations
[18:45:24.727] Watchdog thread started
[18:45:29.186] Watchdog: found game window (HWND=0x96058A, tid=16704)
[18:45:29.186] Crash recovery filter installed
[19:17:02.425] ACCESS_VIOLATION #1: WRITE addr=0x00000023FFFFFFF3 RIP=0x00007FF6723DC1E1
[19:17:02.428]   Module: D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x4DC1E1 (NIpse::CLrPathingAcc::SearchOnMap) instrLen=3
[19:17:02.428]   RAX=0000000000000EA0 RBX=00000023FFFFFFDB RCX=0000000000000000 RDX=0000000000000000 RSI=000001F662E11800 RDI=000001F662E11800 RBP=000001F654E48948 RSP=000000222BFFE300 R8 =0000000000000EA0 R9 =0000000000000EA0 R10=0000000000D5E640 R11=00000000003C4000 R12=0000000000000001 R13=000000222BFFE454 R14=000000222BFFE454 R15=000001F662E11800
[19:17:02.428]   --- Stack Trace (Newest first) ---
[19:17:02.428]   #0x0  0x7ff6723dc1e1 in NIpse::CLrPathingAcc::SearchOnMap ()
[19:17:02.429]   #0x1  0x7ff6723d9968 in NIpse::CLrPathingAcc::ComputePath (pathset=0x0, steps=0x0, from=0x0, to=0x7ff642000000, to=0x222bffe460, limit=0x1f642000000, limit=0x7ff600001388, level=0x7ff6722cdecb, level=0xc39c400000000000, usewarps=0x222bffe490, usewarps=0x13fc00001)
[19:17:02.429]   #0x2  0x7ff6723deda1 in NIpse::CLrPath::ComputeAccl (from=0x0, to=0x0, warps=0x0)
[19:17:02.429]   #0x3  0x7ff6723df310 in NIpse::CLrPath::ComputeWaypoints (cpos=0x0, usewarps=0x0)
[19:17:02.429]   #0x4  0x7ff6723e7509 in NIpse::CPrCluster::MaintainWaypoint (goal=0x0, dynr=0x0, actualgoal=0x0, lastwaypnt=0x0, lastwaypnt=0x222bffe588)
[19:17:02.429]   #0x5  0x7ff6723e5f17 in NIpse::CPrCluster::Heartbeat ()
[19:17:02.429]   #0x6  0x7ff6722c9f90 in NIpse::CThreadData::ClusterHeartbeat ()
[19:17:02.429]   #0x7  0x7ff672b9bf44 in ??? ()
[19:17:02.430]   #0x8  0x7ff6722e804a in CAgentTimer::Signal (timerRequest=0x0)
[19:17:02.430]   #0x9  0x7ff67221f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal ()
[19:17:02.430]   #0xa  0x7ff67221b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (elapsed=0x0)
[19:17:02.430]   #0xb  0x7ff672216ff7 in ??? ()
[19:17:02.431]   #0xc  0x7ff672d8169d in CGameUI::AdvanceSyncGameTime (event=0x0, __formal=0x0, __formal=0x0)
[19:17:02.431]   #0xd  0x7ff6722248c4 in ObserverRegistry::DispatchEvent (eventId=0x0, eventId=0x1f640090092, event=0x0, event=0x222bffe820)
[19:17:02.431]   #0xe  0x7ff67222473f in CObserver::DispatchEvent (eventId=0x0, event=0x0)
[19:17:02.431]   #0xf  0x7ff67334c21d in ??? ()
[19:17:02.431]   #0x10  0x7ff673344bef in ??? ()
[19:17:02.431]   #0x11  0x7ff6722d6b1b in IEvtQueueDispatchCustom (context=0x0, id=0x0, data=0x0)
[19:17:02.431]   #0x12  0x7ff6722da814 in SchedulerThreadProc (onMainThread=0x0)
[19:17:02.432]   #0x13  0x7ff6721cdb97 in ??? ()
[19:17:02.432]   #0x14  0x7ff6721af5e6 in ??? ()
[19:17:02.432]   #0x15  0x7ff673d2b35a in agsSetDisplayMode ()
[19:17:02.433]   #0x16  0x7ffe130e7374 in BaseThreadInitThunk ()
[19:17:02.433]   #0x17  0x7ffe1397cc91 in RtlUserThreadStart ()
....
....
....
[19:17:02.466] ACCESS_VIOLATION #10: READ addr=0x00000023FFFFFFE3 RIP=0x00007FF6723D91B6
[19:17:02.466]   Module: D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x4D91B6 (NIpse::CLrPathingAcc::AddToOpenSet) instrLen=5
[19:17:02.466]   RAX=FFFFFFFFFFFFFFFF RBX=000001F662E118C0 RCX=000001F662E11800 RDX=00000000FFFFFFFF RSI=0000000000000000 RDI=000001F662E11800 RBP=000001F654E48838 RSP=000000222BFFE0C0 R8 =00000008FFFFFFF7 R9 =0000000000000EA0 R10=0000000000D5E640 R11=0000000000000000 R12=0000000000000001 R13=000000222BFFE270 R14=000000222BFFE270 R15=000001F662E11800
[19:17:02.466]   --- Stack Trace (Newest first) ---
[19:17:02.466]   #0x0  0x7ff6723d91b6 in NIpse::CLrPathingAcc::AddToOpenSet (cnodei=0x0)
[19:17:02.466]   #0x1  0x7ff6723dc1f2 in NIpse::CLrPathingAcc::SearchOnMap ()
[19:17:02.466]   #0x2  0x7ff6723d9968 in NIpse::CLrPathingAcc::ComputePath (pathset=0x0, steps=0x0, from=0x0, to=0x42000000, to=0x222bffe268, limit=0x42000000, limit=0x7ff600000190, level=0x0, level=0x0, usewarps=0x0, usewarps=0x7ff6721e2c01)
[19:17:02.466]   #0x3  0x7ff6723deda1 in NIpse::CLrPath::ComputeAccl (from=0x0, to=0x0, warps=0x0)
[19:17:02.466]   #0x4  0x7ff6723dd09a in NIpse::CLrPath::AdvanceAccl (cpos=0x0)
[19:17:02.466]   #0x5  0x7ff6723dcf91 in NIpse::CLrPath::Advance (cpos=0x0, mapc=0x0, owner=0x0)
[19:17:02.466]   #0x6  0x7ff6723ead67 in NIpse::CPoPosCl::Execute (pos=0x0, goal=0x0, mag=0x0, ori=0x222bffe408, ori=0x1f65797d03c, arrived=0x222bffe498, arrived=0x222bffe490, inrange=0x7ff6722c14d7, inrange=0x222bffe498, partial=0x0, partial=0x223f780000, gexcl=0x7ff6722cdecb, gexcl=0x0, reset=0x4280000042800000, reset=0x1f654e48800)
[19:17:02.466]   #0x7  0x7ff6723e3ad4 in NIpse::CPrCluster::ComputeMemberMovement (m_=0x0, dynr=0x0, dynr=0x0)
[19:17:02.466]   #0x8  0x7ff6723e64a5 in NIpse::CPrCluster::HeartbeatComputeMovement (dynr=0x0)
[19:17:02.466]   #0x9  0x7ff6723e5f2a in NIpse::CPrCluster::Heartbeat ()
[19:17:02.466]   #0xa  0x7ff6722c9f90 in NIpse::CThreadData::ClusterHeartbeat ()
[19:17:41.750] HANG DETECTED: main thread not responding
[19:17:41.761] === Hang Diagnostic: All Thread Stacks ===
[19:17:41.842]   Thread 16704 [MAIN]: RIP=0x00007FF673D2E7FE D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x1E2E7FE (agsSetDisplayMode)
[19:17:41.842]   RAX=00007FF4C2F50010 RBX=00007FF67F874E68 RCX=00007FF4C4E00F20 RDX=00007FF4C9450F20 RSI=0000000004640010 RDI=00007FF4C75A0010 RBP=00007FF4C2F50010 RSP=000000222BFFE088 R8 =000000000278F0C0 R9 =FFFFFFFFFFFFFFF0 R10=00007FF671F00000 R11=0000000000000246 R12=000000222BFFE430 R13=000000222BFFE430 R14=0000000000000001 R15=000000222BFFE2B0
[19:17:41.842]   --- Stack Trace (Newest first) ---
[19:17:41.842]   #0x0  0x7ff673d2e7fe in agsSetDisplayMode ()
[19:17:41.842]   #0x1  0x7ff673cb3a71 in agsSetDisplayMode (storage=0x0, <args_0>=0x0, <args_1>=0x0)
[19:17:41.842]   #0x2  0x7ff6722a5d62 in NTempest::CMemBlock::Resize (newsize=0x0, preserve=0x0)
[19:17:41.842]   #0x3  0x7ff6722aa363 in NTempest::CDynTable<NTempest::C2uVector>::Grow (entry=0x0, count=0x0)
[19:17:41.842]   #0x4  0x7ff6722a9978 in NIpse::CLrPathingSys::BuildPath (fnode=0x0, steps=0x0, from=0x0, to=0xe00000000, to=0x222bffe2b0)
[19:17:41.842]   #0x5  0x7ff6722a9ce1 in NIpse::CLrPathingSys::ComputePath (steps=0x0, from=0x0, to=0x0, pfm=0x1f654e48ae4, pfm=0x1f654e48ac0, limit=0x0, limit=0x1f6000002bc, intrfr=0x4a, intrfr=0x1f654e48ae4, exgo=0x222bffe430, exgo=0x0)
[19:17:41.842]   #0x6  0x7ff6723df033 in NIpse::CLrPath::ComputeHigh (from=0x0, to=0x0)
[19:17:41.842]   #0x7  0x7ff6723dd44f in NIpse::CLrPath::AdvanceHigh (cpos=0x0, mapc=0x0)
[19:17:41.842]   #0x8  0x7ff6723dcfa3 in NIpse::CLrPath::Advance (cpos=0x0, mapc=0x0, owner=0x0)
[19:17:41.842]   #0x9  0x7ff6723ead67 in NIpse::CPoPosCl::Execute (pos=0x0, goal=0x0, mag=0x0, ori=0x222bffe408, ori=0x1f665b3266c, arrived=0x222bffe498, arrived=0x222bffe490, inrange=0x7ff6722c14d7, inrange=0x222bffe498, partial=0x0, partial=0x2200000000, gexcl=0x222bffe3e8, gexcl=0x0, reset=0x4280000042800000, reset=0x7ff6722cde00)
[19:17:41.842]   #0xa  0x7ff6723e3ad4 in NIpse::CPrCluster::ComputeMemberMovement (m_=0x0, dynr=0x0, dynr=0x0)
[19:17:41.842]   #0xb  0x7ff6723e64a5 in NIpse::CPrCluster::HeartbeatComputeMovement (dynr=0x0)
[19:17:41.842]   #0xc  0x7ff6723e5f2a in NIpse::CPrCluster::Heartbeat ()
[19:17:41.842]   #0xd  0x7ff6722c9f90 in NIpse::CThreadData::ClusterHeartbeat ()
[19:17:41.842]   #0xe  0x7ff672b9bf44 in ??? ()
[19:17:41.842]   #0xf  0x7ff6722e804a in CAgentTimer::Signal (timerRequest=0x0)
[19:17:41.842]   #0x10  0x7ff67221f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal ()
[19:17:41.842]   #0x11  0x7ff67221b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (elapsed=0x0)
[19:17:41.842]   #0x12  0x7ff672216ff7 in ??? ()
[19:17:41.842]   #0x13  0x7ff672d8169d in CGameUI::AdvanceSyncGameTime (event=0x0, __formal=0x0, __formal=0x0)
[19:17:41.842]   #0x14  0x7ff6722248c4 in ObserverRegistry::DispatchEvent (eventId=0x0, eventId=0x1f640090092, event=0x0, event=0x222bffe820)
[19:17:41.842]   #0x15  0x7ff67222473f in CObserver::DispatchEvent (eventId=0x0, event=0x0)
[19:17:41.842]   #0x16  0x7ff67334c21d in ??? ()
[19:17:41.842]   #0x17  0x7ff673344bef in ??? ()
[19:17:41.842]   #0x18  0x7ff6722d6b1b in IEvtQueueDispatchCustom (context=0x0, id=0x0, data=0x0)
[19:17:41.842]   #0x19  0x7ff6722da814 in SchedulerThreadProc (onMainThread=0x0)
[19:17:41.842]   #0x1a  0x7ff6721cdb97 in ??? ()
[19:17:41.842]   #0x1b  0x7ff6721af5e6 in ??? ()
[19:17:41.842]   #0x1c  0x7ff673d2b35a in agsSetDisplayMode ()
[19:17:41.842]   #0x1d  0x7ffe130e7374 in BaseThreadInitThunk ()
[19:17:41.842]   #0x1e  0x7ffe1397cc91 in RtlUserThreadStart ()
[19:17:41.843]   Thread 19476: RIP=0x00007FFE139CD624 C:\Windows\SYSTEM32\ntdll.dll +0x9D624 (ZwWaitForSingleObject)
[19:17:41.843]   Thread 26644: RIP=0x00007FFE139D1034 C:\Windows\SYSTEM32\ntdll.dll +0xA1034 (ZwWaitForWorkViaWorkerFactory)
[19:17:41.843]   Thread 26784: RIP=0x00007FFE139CDC24 C:\Windows\SYSTEM32\ntdll.dll +0x9DC24 (NtDelayExecution)
[19:17:41.843]   Thread 22920: RIP=0x00007FFE139D0FD4 C:\Windows\SYSTEM32\ntdll.dll +0xA0FD4 (NtWaitForAlertByThreadId)
[19:17:41.843]   Thread 7408: RIP=0x00007FFE139CD624 C:\Windows\SYSTEM32\ntdll.dll +0x9D624 (ZwWaitForSingleObject)
.....
.....
[19:17:41.846]   Thread 17768: RIP=0x00007FFE139D1034 C:\Windows\SYSTEM32\ntdll.dll +0xA1034 (ZwWaitForWorkViaWorkerFactory)
[19:17:41.851] === End Hang Diagnostic ===
[19:17:44.852]   Thread 16704 [MAIN]: RIP=0x00007FF673D2E7E6 D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x1E2E7E6 (agsSetDisplayMode)
[19:17:47.853]   Thread 16704 [MAIN]: RIP=0x00007FF673D2E7E6 D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x1E2E7E6 (agsSetDisplayMode)
.....
.....
[19:18:29.873]   Thread 16704 [MAIN]: RIP=0x00007FFE139CDA04 C:\Windows\SYSTEM32\ntdll.dll +0x9DA04 (ZwQueryVirtualMemory)
[19:18:32.874]   Thread 16704 [MAIN]: RIP=0x00007FFE139CDA04 C:\Windows\SYSTEM32\ntdll.dll +0x9DA04 (ZwQueryVirtualMemory)
[19:18:35.875]   Thread 16704 [MAIN]: RIP=0x00007FF673D2E7E6 D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x1E2E7E6 (agsSetDisplayMode)
[19:18:38.876]   Thread 16704 [MAIN]: RIP=0x00007FF673D2E7E6 D:\Program Files (x86)\Warcraft III\_retail_\x86_64\Warcraft III.exe +0x1E2E7E6 (agsSetDisplayMode)
[19:18:41.877] Watchdog: still hung after 60s, stopping periodic samples
Contents

testMap_009 (Map)

I had no idea this existed lol.
Depends on what type of crash this causes (if it's doing access violation or something else). I'd love to test it if you have some example map
I believe the most played map legion td uses this method. Votekicking causes a crash and you must force close the .exe "stopped working" white screen.

Any latest team Oze legion td does this.
 
I believe the most played map legion td uses this method. Votekicking causes a crash and you must force close the .exe "stopped working" white screen.

Any latest team Oze legion td does this.
Seems like this is not a crash - the screen turns black, but wc3 stays open and there is no error report created in Documents\Warcraft III\Errors.
My tool doesn't see it or prevent it.
 
Seems like this is not a crash - the screen turns black, but wc3 stays open and there is no error report created in Documents\Warcraft III\Errors.
My tool doesn't see it or prevent it.
Okay interesting... There was discussion about this maps kick system some time ago and people believed it was a hardcrash... cheers!
 
Hello Tomotz, Very good plugin, I have a map that always crashes, if I can, I can provide it.
This is a Melee map with AMAI. The maximum number of players is 12. I often play 6v6. But it's easy to crash without an error window, and I can't tell why.
You can watch the game as a referee or as one of the players. AI difficulty is all Settings for Insane. The usual crash-prone mode is 6 undead VS 6 night elves, but you can also try other races against. There is a high probability of a repeat of this crash.
Version 2.0.4.23556. Thanks!
 
I followed your instructions to use the root directory to place version.dll, and symbol.txt, when I open the game, It works fine and is documented by log, but after the game crashes, it produces log.txt, But the file name is the event of a crash, open inside is empty, I think the dll can not capture this crash? This has been bothering me for a long time, hope you can find it and solve it, thanks again🙏🏻,I will upload this map later, please be patient😁
 
I followed your instructions to use the root directory to place version.dll, and symbol.txt, when I open the game, It works fine and is documented by log, but after the game crashes, it produces log.txt, But the file name is the event of a crash, open inside is empty, I think the dll can not capture this crash? This has been bothering me for a long time, hope you can find it and solve it, thanks again🙏🏻,I will upload this map later, please be patient😁
You mean it creates ...\Documents\CrashProtector\crash_protector.log but the log stays only 7 lines even after you crash? There should always be a few lines there.

Are you sure it's a crash and not a desync/network disconnect?
You can check if wc3 generated a crash/desync log under Documents\Warcraft III\Errors (there should be a folder with the date and time of the game, and inside Desync.txt or Crash.txt).
 
You mean it creates ...\Documents\CrashProtector\crash_protector.log but the log stays only 7 lines even after you crash? There should always be a few lines there.

Are you sure it's a crash and not a desync/network disconnect?
You can check if wc3 generated a crash/desync log under Documents\Warcraft III\Errors (there should be a folder with the date and time of the game, and inside Desync.txt or Crash.txt).
No, dude, even if I didn't put the version.dll in the root directory, it wouldn't generate a log after a crash, so that's bad, But in rare cases there will be access violations, but too few, I will upload a map later on which I can reproduce this crash
 
Even I thought for a moment that this might not be the type of access violation? But the indications are that most of the crashes are access violations, and I don't have network problems, Because I always play in single player mode😳
 
Hi, Tomotz, I've uploaded the map. You might want to test it as I suggested, but there's likely no crash log, so expanding the crash scope poses a significant challenge for you. Thank you
 

Attachments

Just now, I hosted a game on this map, which included 12 crazy AI battles. The symbol successfully prevented a plane crash and avoided six more! This error involves the "spell stealing" ability of the disruptor, and your version. dll played a crucial role! However, this map, even AMAI, still crashes without any error reports. I have uploaded logs for two scenarios for your review!

[InitSymbols] symbols.txt: 105823 funcs, 241635 params, 8970104 string bytes
[InitSymbols] symbols.txt loaded: 105823 funcs, 241635 params
[17:43:23.891] === CrashProtector loaded (PID 11144, symbols=YES) ===
[17:43:23.891] Ready - monitoring for invalid pointer access violations
[17:43:23.891] Watchdog thread started
[17:43:25.365] CrashProtector v1.2.0. Found game window (HWND=0x90524, tid=2844)
[17:43:25.365] Watchdog: hang detection grace period active (120 seconds)
[18:07:12.253] ACCESS_VIOLATION #1: WRITE addr=0x0000000000000038 RIP=0x00007FF780EE5A0F
Module: K:\Warcraft III\retail\x86_64\Warcraft III.exe +0x875A0F (CAbilitySpellSteal::DoDerivedEffect)
RAX=0000000000000000 RBX=0000000000000000 RCX=00000146048D4D00 RDX=0000000000045ECE RSI=0000000000000001 RDI=0000000000000001 RBP=00000040E5FFE430 RSP=00000040E5FFE330 R8 =000001461B472998 R9 =0000000000045ECE R10=0000000000000000 R11=00000000DA2CAEE2 R12=00007FF484A2F8B8 R13=0000000000000000 R14=0000014612864CF8 R15=0000014620403018
--- Stack Trace (Newest first) ---
#0x0 0x7ff780ee5a0f in CAbilitySpellSteal::DoDerivedEffect (this=0x146048d4d00, unit=0x45ece)
#0x1 0x7ff780cb71ac in CAbilitySimpleSpell::DoSpellEffect (this=0x146048d4d00)
#0x2 0x7ff780cb3b50 in ??? ()
#0x3 0x7ff780cb4241 in CAbilitySpell::Effect (this=0x146048d4d00, delayed=0x0)
#0x4 0x7ff780cb2626 in CAbilitySpell::OnEvent (this=0x146048d4d00, event=0x45ece)
#0x5 0x7ff780cb5e9a in CAbilitySimpleSpell::OnEvent (this=0x146048d4d00, event=0x45ece)
#0x6 0x7ff780a5804a in CAgentTimer::Signal (this=0x146048d4d00, timerRequest=0x45ece)
#0x7 0x7ff78098f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal (this=0x146048d4d00)
#0x8 0x7ff78098b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (this=0x146048d4d00, elapsed=0x45ece)
#0x9 0x7ff780986ff7 in AgileAdvanceTime (delta=0x146048d4d00)
#0xa 0x7ff7814f169d in CGameUI::AdvanceSyncGameTime (this=0x146048d4d00, this=0x146048d4d00, pAgent=0x45ece)
#0xb 0x7ff7809948c4 in ObserverRegistry::DispatchEvent (this=0x146048d4d00, eventId=0x0, eventId=0x14540090092, event=0x1461b472998, event=0x40e5ffe910)
#0xc 0x7ff78099473f in CObserver::DispatchEvent (this=0x146048d4d00, eventId=0x0, event=0x1461b472998)
#0xd 0x7ff781abc21d in ??? ()
#0xe 0x7ff781ab4bef in ??? ()
#0xf 0x7ff780a46b1b in IEvtQueueDispatchCustom (context=0x146048d4d00, id=0x0, data=0x1461b472998)
#0x10 0x7ff780a4a814 in SchedulerThreadProc (onMainThread=0x0)
#0x11 0x7ff78093db97 in ??? ()
#0x12 0x7ff78091f5e6 in ??? ()
#0x13 0x7ff78249b35a in agsSetDisplayMode ()
#0x14 0x7ff870ade8d7 in BaseThreadInitThunk ()
#0x15 0x7ff8725ac3fc in RtlUserThreadStart ()
[18:07:12.254] ACCESS_VIOLATION #2: READ addr=0x0000000000000000 RIP=0x00007FF780EE5A56
Module: K:\Warcraft III\retail\x86_64\Warcraft III.exe +0x875A56 (CAbilitySpellSteal::DoDerivedEffect)
RAX=00000000C59847F8 RBX=0000000000000000 RCX=0000000000000002 RDX=00000000FF000000 RSI=0000000000000001 RDI=0000000000000001 RBP=00000040E5FFE430 RSP=00000040E5FFE330 R8 =0000000000342338 R9 =00000040E5FFE310 R10=0000000046000000 R11=0000000000000000 R12=00007FF484A2F8B8 R13=0000000000000000 R14=0000014612864CF8 R15=0000014620403018
--- Stack Trace (Newest first) ---
#0x0 0x7ff780ee5a56 in CAbilitySpellSteal::DoDerivedEffect (this=0x2, unit=0xff000000)
#0x1 0x7ff780cb71ac in CAbilitySimpleSpell::DoSpellEffect (this=0x2)
#0x2 0x7ff780cb3b50 in ??? ()
#0x3 0x7ff780cb4241 in CAbilitySpell::Effect (this=0x2, delayed=0x0)
#0x4 0x7ff780cb2626 in CAbilitySpell::OnEvent (this=0x2, event=0xff000000)
#0x5 0x7ff780cb5e9a in CAbilitySimpleSpell::OnEvent (this=0x2, event=0xff000000)
#0x6 0x7ff780a5804a in CAgentTimer::Signal (this=0x2, timerRequest=0xff000000)
#0x7 0x7ff78098f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal (this=0x2)
#0x8 0x7ff78098b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (this=0x2, elapsed=0xff000000)
#0x9 0x7ff780986ff7 in AgileAdvanceTime (delta=0x2)
#0xa 0x7ff7814f169d in CGameUI::AdvanceSyncGameTime (this=0x2, this=0x2, pAgent=0xff000000)
#0xb 0x7ff7809948c4 in ObserverRegistry::DispatchEvent (this=0x2, eventId=0x0, eventId=0x14540090092, event=0x342338, event=0x40e5ffe910)
#0xc 0x7ff78099473f in CObserver::DispatchEvent (this=0x2, eventId=0x0, event=0x342338)
#0xd 0x7ff781abc21d in ??? ()
#0xe 0x7ff781ab4bef in ??? ()
#0xf 0x7ff780a46b1b in IEvtQueueDispatchCustom (context=0x2, id=0x0, data=0x342338)
#0x10 0x7ff780a4a814 in SchedulerThreadProc (onMainThread=0x0)
#0x11 0x7ff78093db97 in ??? ()
#0x12 0x7ff78091f5e6 in ??? ()
#0x13 0x7ff78249b35a in agsSetDisplayMode ()
#0x14 0x7ff870ade8d7 in BaseThreadInitThunk ()
#0x15 0x7ff8725ac3fc in RtlUserThreadStart ()
[18:07:12.254] ACCESS_VIOLATION #3: READ addr=0x0000000000000040 RIP=0x00007FF780EE5A5D
Module: K:\Warcraft III\retail\x86_64\Warcraft III.exe +0x875A5D (CAbilitySpellSteal::DoDerivedEffect)
RAX=0000000000000000 RBX=0000000000000000 RCX=0000000000000000 RDX=00000000FF000000 RSI=0000000000000001 RDI=0000000000000001 RBP=00000040E5FFE430 RSP=00000040E5FFE330 R8 =0000000000342338 R9 =00000040E5FFE310 R10=0000000046000000 R11=0000000000000000 R12=00007FF484A2F8B8 R13=0000000000000000 R14=0000014612864CF8 R15=0000014620403018
--- Stack Trace (Newest first) ---
#0x0 0x7ff780ee5a5d in CAbilitySpellSteal::DoDerivedEffect (this=0x0, unit=0xff000000)
#0x1 0x7ff780cb71ac in CAbilitySimpleSpell::DoSpellEffect (this=0x0)
#0x2 0x7ff780cb3b50 in ??? ()
#0x3 0x7ff780cb4241 in CAbilitySpell::Effect (this=0x0, delayed=0x0)
#0x4 0x7ff780cb2626 in CAbilitySpell::OnEvent (this=0x0, event=0xff000000)
#0x5 0x7ff780cb5e9a in CAbilitySimpleSpell::OnEvent (this=0x0, event=0xff000000)
#0x6 0x7ff780a5804a in CAgentTimer::Signal (this=0x0, timerRequest=0xff000000)
#0x7 0x7ff78098f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal (this=0x0)
#0x8 0x7ff78098b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (this=0x0, elapsed=0xff000000)
#0x9 0x7ff780986ff7 in AgileAdvanceTime (delta=0x0)
#0xa 0x7ff7814f169d in CGameUI::AdvanceSyncGameTime (this=0x0, this=0x0, pAgent=0xff000000)
#0xb 0x7ff7809948c4 in ObserverRegistry::DispatchEvent (this=0x0, eventId=0x0, eventId=0x14540090092, event=0x342338, event=0x40e5ffe910)
#0xc 0x7ff78099473f in CObserver::DispatchEvent (this=0x0, eventId=0x0, event=0x342338)
#0xd 0x7ff781abc21d in ??? ()
#0xe 0x7ff781ab4bef in ??? ()
#0xf 0x7ff780a46b1b in IEvtQueueDispatchCustom (context=0x0, id=0x0, data=0x342338)
#0x10 0x7ff780a4a814 in SchedulerThreadProc (onMainThread=0x0)
#0x11 0x7ff78093db97 in ??? ()
#0x12 0x7ff78091f5e6 in ??? ()
#0x13 0x7ff78249b35a in agsSetDisplayMode ()
#0x14 0x7ff870ade8d7 in BaseThreadInitThunk ()
#0x15 0x7ff8725ac3fc in RtlUserThreadStart ()
[18:07:12.255] ACCESS_VIOLATION #4: READ addr=0x0000000000000148 RIP=0x00007FF780EE5A6C
Module: K:\Warcraft III\retail\x86_64\Warcraft III.exe +0x875A6C (CAbilitySpellSteal::DoDerivedEffect)
RAX=000000007F7FFFFF RBX=0000000000000000 RCX=0000000000000000 RDX=0000000000000000 RSI=0000000000000001 RDI=0000000000000001 RBP=00000040E5FFE430 RSP=00000040E5FFE330 R8 =0000000000342338 R9 =00000040E5FFE310 R10=0000000046000000 R11=0000000000000000 R12=00007FF484A2F8B8 R13=0000000000000000 R14=0000014612864CF8 R15=0000014620403018
--- Stack Trace (Newest first) ---
#0x0 0x7ff780ee5a6c in CAbilitySpellSteal::DoDerivedEffect (this=0x0, unit=0x0)
#0x1 0x7ff780cb71ac in CAbilitySimpleSpell::DoSpellEffect (this=0x0)
#0x2 0x7ff780cb3b50 in ??? ()
#0x3 0x7ff780cb4241 in CAbilitySpell::Effect (this=0x0, delayed=0x0)
#0x4 0x7ff780cb2626 in CAbilitySpell::OnEvent (this=0x0, event=0x0)
#0x5 0x7ff780cb5e9a in CAbilitySimpleSpell::OnEvent (this=0x0, event=0x0)
#0x6 0x7ff780a5804a in CAgentTimer::Signal (this=0x0, timerRequest=0x0)
#0x7 0x7ff78098f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal (this=0x0)
#0x8 0x7ff78098b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (this=0x0, elapsed=0x0)
#0x9 0x7ff780986ff7 in AgileAdvanceTime (delta=0x0)
#0xa 0x7ff7814f169d in CGameUI::AdvanceSyncGameTime (this=0x0, this=0x0, pAgent=0x0)
#0xb 0x7ff7809948c4 in ObserverRegistry::DispatchEvent (this=0x0, eventId=0x0, eventId=0x14540090092, event=0x342338, event=0x40e5ffe910)
#0xc 0x7ff78099473f in CObserver::DispatchEvent (this=0x0, eventId=0x0, event=0x342338)
#0xd 0x7ff781abc21d in ??? ()
#0xe 0x7ff781ab4bef in ??? ()
#0xf 0x7ff780a46b1b in IEvtQueueDispatchCustom (context=0x0, id=0x0, data=0x342338)
#0x10 0x7ff780a4a814 in SchedulerThreadProc (onMainThread=0x0)
#0x11 0x7ff78093db97 in ??? ()
#0x12 0x7ff78091f5e6 in ??? ()
#0x13 0x7ff78249b35a in agsSetDisplayMode ()
#0x14 0x7ff870ade8d7 in BaseThreadInitThunk ()
#0x15 0x7ff8725ac3fc in RtlUserThreadStart ()
[18:07:12.255] ACCESS_VIOLATION #5: READ addr=0x0000000000000000 RIP=0x00007FF780EE5A7A
Module: K:\Warcraft III\retail\x86_64\Warcraft III.exe +0x875A7A (CAbilitySpellSteal::DoDerivedEffect)
RAX=0000000000000000 RBX=0000000000000000 RCX=0000000000000000 RDX=0000000000000000 RSI=0000000000000001 RDI=0000000000000001 RBP=00000040E5FFE430 RSP=00000040E5FFE330 R8 =0000000000342338 R9 =00000040E5FFE310 R10=0000000046000000 R11=0000000000000000 R12=00007FF484A2F8B8 R13=0000000000000000 R14=0000014612864CF8 R15=0000014620403018
--- Stack Trace (Newest first) ---
#0x0 0x7ff780ee5a7a in CAbilitySpellSteal::DoDerivedEffect (this=0x0, unit=0x0)
#0x1 0x7ff780cb71ac in CAbilitySimpleSpell::DoSpellEffect (this=0x0)
#0x2 0x7ff780cb3b50 in ??? ()
#0x3 0x7ff780cb4241 in CAbilitySpell::Effect (this=0x0, delayed=0x0)
#0x4 0x7ff780cb2626 in CAbilitySpell::OnEvent (this=0x0, event=0x0)
#0x5 0x7ff780cb5e9a in CAbilitySimpleSpell::OnEvent (this=0x0, event=0x0)
#0x6 0x7ff780a5804a in CAgentTimer::Signal (this=0x0, timerRequest=0x0)
#0x7 0x7ff78098f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal (this=0x0)
#0x8 0x7ff78098b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (this=0x0, elapsed=0x0)
#0x9 0x7ff780986ff7 in AgileAdvanceTime (delta=0x0)
#0xa 0x7ff7814f169d in CGameUI::AdvanceSyncGameTime (this=0x0, this=0x0, pAgent=0x0)
#0xb 0x7ff7809948c4 in ObserverRegistry::DispatchEvent (this=0x0, eventId=0x0, eventId=0x14540090092, event=0x342338, event=0x40e5ffe910)
#0xc 0x7ff78099473f in CObserver::DispatchEvent (this=0x0, eventId=0x0, event=0x342338)
#0xd 0x7ff781abc21d in ??? ()
#0xe 0x7ff781ab4bef in ??? ()
#0xf 0x7ff780a46b1b in IEvtQueueDispatchCustom (context=0x0, id=0x0, data=0x342338)
#0x10 0x7ff780a4a814 in SchedulerThreadProc (onMainThread=0x0)
#0x11 0x7ff78093db97 in ??? ()
#0x12 0x7ff78091f5e6 in ??? ()
#0x13 0x7ff78249b35a in agsSetDisplayMode ()
#0x14 0x7ff870ade8d7 in BaseThreadInitThunk ()
#0x15 0x7ff8725ac3fc in RtlUserThreadStart ()
[18:07:12.255] ACCESS_VIOLATION #6: READ addr=0x0000000000000400 RIP=0x00007FF780EE5A81
Module: K:\Warcraft III\retail\x86_64\Warcraft III.exe +0x875A81 (CAbilitySpellSteal::DoDerivedEffect)
RAX=0000000000000000 RBX=0000000000000000 RCX=0000000000000000 RDX=0000000000000000 RSI=0000000000000001 RDI=0000000000000001 RBP=00000040E5FFE430 RSP=00000040E5FFE330 R8 =0000000000342338 R9 =00000040E5FFE310 R10=0000000046000000 R11=0000000000000000 R12=00007FF484A2F8B8 R13=0000000000000000 R14=0000014612864CF8 R15=0000014620403018
--- Stack Trace (Newest first) ---
#0x0 0x7ff780ee5a81 in CAbilitySpellSteal::DoDerivedEffect (this=0x0, unit=0x0)
#0x1 0x7ff780cb71ac in CAbilitySimpleSpell::DoSpellEffect (this=0x0)
#0x2 0x7ff780cb3b50 in ??? ()
#0x3 0x7ff780cb4241 in CAbilitySpell::Effect (this=0x0, delayed=0x0)
#0x4 0x7ff780cb2626 in CAbilitySpell::OnEvent (this=0x0, event=0x0)
#0x5 0x7ff780cb5e9a in CAbilitySimpleSpell::OnEvent (this=0x0, event=0x0)
#0x6 0x7ff780a5804a in CAgentTimer::Signal (this=0x0, timerRequest=0x0)
#0x7 0x7ff78098f9c4 in NIpse::CSiRequest<CAgentTimer,unsigned int>::Signal (this=0x0)
#0x8 0x7ff78098b08c in NIpse::CSiDispatch<CAgentTimer,unsigned int>::ElapseTimeDirect (this=0x0, elapsed=0x0)
#0x9 0x7ff780986ff7 in AgileAdvanceTime (delta=0x0)
#0xa 0x7ff7814f169d in CGameUI::AdvanceSyncGameTime (this=0x0, this=0x0, pAgent=0x0)
#0xb 0x7ff7809948c4 in ObserverRegistry::DispatchEvent (this=0x0, eventId=0x0, eventId=0x14540090092, event=0x342338, event=0x40e5ffe910)
#0xc 0x7ff78099473f in CObserver::DispatchEvent (this=0x0, eventId=0x0, event=0x342338)
#0xd 0x7ff781abc21d in ??? ()
#0xe 0x7ff781ab4bef in ??? ()
#0xf 0x7ff780a46b1b in IEvtQueueDispatchCustom (context=0x0, id=0x0, data=0x342338)
#0x10 0x7ff780a4a814 in SchedulerThreadProc (onMainThread=0x0)
#0x11 0x7ff78093db97 in ??? ()
#0x12 0x7ff78091f5e6 in ??? ()
#0x13 0x7ff78249b35a in agsSetDisplayMode ()
#0x14 0x7ff870ade8d7 in BaseThreadInitThunk ()
#0x15 0x7ff8725ac3fc in RtlUserThreadStart ()


The other information is blank, so I cannot help you upload it,The software you developed is really powerful, but it would be even better if it could solve the crash I encountered without an error window!:thumbs_up:
 
Last edited:
Does the crash happen every game? How long do you need to play for it to happen? How do I set the game with teams of 6 undead vs 6 human? I never play melee maps
Yes, you watch as a referees, 6 insane undead against 6 insane night elves, maybe not every game will crash, But such confrontations have a high probability of triggering a crash, almost always late in the game
 
This is more like a pathfinding error that triggered a desperate attack at a later stage, perhaps not access violence, But you might be able to reproduce the crash because symbols.txt catches it, even though there may be nothing in the log
 
I tested a lot of games, using the latest version of version.dll, v1.3.0, and the game didn't crash. What new features have you added? As I said, the crash scope has been expanded in the new version, right?
 
I tested a lot of games, using the latest version of version.dll, v1.3.0, and the game didn't crash. What new features have you added? As I said, the crash scope has been expanded in the new version, right?
Yes, you can see the changelog in the main post. I'm catching more exception types.

Note that any exception crash protector is saving you from will be written to the log. If you don't see exceptions in the log it means it was random luck that made you not crash, and not the protector. If you see an exception, you can see what type it was and why it saved you
 
Yes, you can see the changelog in the main post. I'm catching more exception types.

Note that any exception crash protector is saving you from will be written to the log. If you don't see exceptions in the log it means it was random luck that made you not crash, and not the protector. If you see an exception, you can see what type it was and why it saved you
This is good, I hope to be able to expand more crash types, I do not crash again:grin::thumbs_up:
 
Really useful. If I we can really see the stack traces this will massively improve the quality of maps. Maybe we can send more detailed information about the AI crash when AI tries to attack in a map larger than 224x224 to Blizzard. See https://www.hiveworkshop.com/thread...he-game-on-reforged-only-on-some-maps.359199/ this one of the most annoying bugs for me.
You had a no - error window crash, too? Also triggered on a larger map? I often fight with the AI, usually on the larger 12 player maps, and crash almost every week, with no error window, This is really bad, but this plugin saved it, I have encountered at least one pop-up error and prevented the crash. But I also think that even if they can give feedback to Blizzard, they won't do anything, hahaha:mwahaha:
 
Hi,Tomotz.I'm sorry to bother you again, but I had the same crash as before, no error reports, But protector caught the crash, but it was empty, so I'm uploading it to you, Still FrozenLand this map, I was watching 12 InsaneAI confrontation, when the AI makes its final charge late in the game, a sudden crash, can you still find out the reason?This does not appear to be within the scope of the current crash Thank you, salute:grin:
 

Attachments

  • mmexport1776086866799.png
    mmexport1776086866799.png
    5.8 KB · Views: 13
  • mmexport1776086869557.png
    mmexport1776086869557.png
    22.7 KB · Views: 12
  • mmexport1776086872742.png
    mmexport1776086872742.png
    24.4 KB · Views: 11
Weird, there shouldn't be any empty files created.
Did wc3 actually crash? Maybe it crashed before crash protector flushed the log
Yes, perhaps, this is not an AV type crash, so, no information can be captured, but it is most likely to happen in the later stages of the game
 
Weird, there shouldn't be any empty files created.
Did wc3 actually crash? Maybe it crashed before crash protector flushed the log
The game suddenly crash, back to the desktop, without any system log, the game itself log is not recorded, only the protector of a time TXT, This is the only proof:vw_death:
 
Good plug-in, effectively avoid access violation errors, has been expanding the scope of the crash, will be more powerful
 
This method is the easiest way to reproduce crashes. Thank you for your testing and support, and thank you to the community!
 
@poverer我更新了git中的工具。现在它应该刷新它写的每个日志,所以更多的变化,它会打印一些东西到日志当你崩溃。尝试更新
Thank you very much, I will update and try to reproduce the crash, and then upload the log to help you observe the cause :grin:
 
@Tomotz,Thank you for your support of WC3, I encountered no error window crash again today,as I uploaded the picture, the game lasted about 50 minutes, even though I used the latest version of git above version.dll, Maybe it's Blizzard's problem, they make the game so bad, you've tried to avoid a lot of crash types, but this may be the game engine itself, thank you, I will continue to pay attention to your support for protector :thumbs_up:
mmexport1776347132299.png
mmexport1776347133784.png
mmexport1776347135077.png
 
Seems like this is not a crash - the screen turns black, but wc3 stays open and there is no error report created in Documents\Warcraft III\Errors.
My tool doesn't see it or prevent it.

My map does this and it's not even intentional. I liked it as a punishment for afk people so I left it that way.
It's achieved (At least in my case) by making a victory for the player skipping dialogs and scores.
 
Hi, it's PTR 2.0.4.23727, but I play the game the same way, Protector actually captured the record!Although the game eventually crashes, these captured messages may help, I uploaded the picture, please analyze what caused this problem, thank you :grin:
mmexport1776493841946.png
 
The first line in the file means that you're running a different version of wc3 than the one I created the symbols for. Did you update it or something? I don't see that there was a recent patch. It didn't appear in your previous screenshots.

Anyways error is STATUS_STACK_OVERFLOW (rather than the normal STATUS_ACCESS_VIOLATION the script handles best). This is a pretty bad one and unsurprising the process crashed despite crash protector (crash protector tried fixing it, but stack overflow probably need something more extensive to fix).
 
文件中的第一行意味着您正在运行的wc3版本与我为其创建符号的版本不同。你更新了吗?我没看到最近有补丁。它没有出现在你以前的截图。

不管怎样,错误是STATUS_STACK_OVERFLOW(而不是脚本处理得最好的普通STATUS_ACCESS_eviluation)。这是一个相当糟糕的,不足为奇的进程崩溃,尽管崩溃保护器(崩溃保护器试图修复它,但堆栈溢出可能需要更广泛的东西来修复)。
Yes, I'm running the latest version of PTR, which is 2.0.4.23727, version.dll uses your latest version, which is also in the live version, which is 2.0.4.23556, after a crash, logs tend to be empty, but in PTR, the protectors were able to record some information, which surprised me. Are you sure you can find a way to avoid this crash? Thanks :grin:
 
Yeah, pretty sure I can't think of a generic way to avoid stack overflows (other than the way already implemented which doesn't seem to work for your case
Well, thank you very much for your reply, I'll check the script, I thought there was a good chance that my common. ai had a deep recursion that caused a stack overflow,thanks :thumbs_up:
 
Hello, @Tomotz, It's been a long time since I last sent a message. Thank you for your support of the War3 community. This is the program suspension phenomenon that I recently discovered. It successfully captured it, but there is a dead loop that seems to be the cause of the suspension. Can you try using hooks to avoid it in the future? Perhaps, thank you very much for your support

[InitSymbols] symbols.txt: 105431 funcs, 240480 params, 8957139 string bytes
[InitSymbols] symbols.txt loaded: 105431 funcs, 240480 params
[17:20:50.231] === CrashProtector loaded (PID 7416, symbols=YES) ===
[17:20:50.231] Ready - monitoring for invalid pointer access violations
[17:20:50.231] Watchdog thread started
[17:20:52.904] CrashProtector v1.3.1. Found game window (HWND=0x602DE, tid=6748)
[17:20:52.904] Watchdog: hang detection grace period active (90 seconds)
[18:12:03.801] HANG DETECTED: main thread not responding
[18:12:03.805] === Hang Diagnostic: All Thread Stacks ===
Thread 6748 [MAIN]: RIP=0x00007FF7287146C0 K:\Warcraft III Offline\retail\x86_64\Warcraft III.exe +0x3246C0 (ObserverRegistry::UnregisterEvent)
RAX=00000000441ACBE8 RBX=00000000440BBAE8 RCX=0000000000000000 RDX=0000000040190065 RSI=00000000440BBAF8 RDI=00000000D9A55628 RBP=00000000440BBAE8 RSP=0000000003D53B60 R8 =000000000BB21A38 R9 =0000000000000000 R10=0000000003D53DB0 R11=0000000003D53C60 R12=0000000000000000 R13=00000000D7C16288 R14=00000001A8968100 R15=00000000441ACC10
--- Stack Trace (Newest first) ---
#0x0 0x7ff7287146c0 in ObserverRegistry::UnregisterEvent (this=0x0, eventId=0x0, eventId=0x140190065, observer=0xbb21a38, observer=0xbb21a38)
#0x1 0x7ff7286a6224 in CAgentWar3::UnregisterEvent (this=?, eventId=?, observer=?)
#0x2 0x7ff728a64b79 in CAbilityMove::TaskStop (this=?)
#0x3 0x7ff728a5d89f in CAbilityMove::OnEvent (this=?, event=?)
#0x4 0x7ff728713d94 in ObserverRegistry::DispatchEvent (this=?, eventId=?, eventId=0x51a34308, event=?, event=0xd0144)
#0x5 0x7ff728713c0f in CObserver::DispatchEvent (this=?, eventId=?, event=?)
#0x6 0x7ff7295ce600 in CUnit::DoNextTasks (this=?)
#0x7 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x6f726474, first=?, last=?)
#0x8 0x7ff7295d1511 in CUnit::QueueOrder (last=?, __formal=?)
#0x9 0x7ff7295d0a31 in CUnit::ForceOrder (__formal=0x1b9116948, first=?, last=?, __formal=?)
#0xa 0x7ff72a3898c3 in agsSetDisplayMode (outStride=0x7ff72a3898c3, outStride=0x7ff4ed2f47c0, size=?, in=?, inStride=?, out=?, outStride=0x7ff72a3898c3, outStride=0x7ff4ed2f47c0)
#0xb 0x7ff72a34bef0 in agsSetDisplayMode (format=?, dest=?, dest=0x7ff4ed2f47c0)
#0xc 0x7ff72a341d97 in agsSetDisplayMode (sequence=?, model=?)
#0xd 0x7ff72a37e02a in agsSetDisplayMode ()
#0xe 0x7ff7295ead9a in CUnit::OnEvent (i=?, n=?)
#0xf 0x7ff7295ea90d in CUnit::DispatchUnitOrder (__formal=?, __formal=0x1aadcafd8)
#0x10 0x7ff7295d01fa in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x11 0x7ff7295d02f9 in ??? ()
#0x12 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x13 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x14 0x7ff7295d02f9 in ??? ()
#0x15 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x16 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x17 0x7ff7295d02f9 in ??? ()
#0x18 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x19 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x1a 0x7ff7295d02f9 in ??? ()
#0x1b 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x1c 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x1d 0x7ff7295d02f9 in ??? ()
#0x1e 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x1f 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x20 0x7ff7295d02f9 in ??? ()
#0x21 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x22 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x23 0x7ff7295d02f9 in ??? ()
#0x24 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x25 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x26 0x7ff7295d02f9 in ??? ()
#0x27 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x28 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x29 0x7ff7295d02f9 in ??? ()
#0x2a 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x2b 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x2c 0x7ff7295d02f9 in ??? ()
#0x2d 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x2e 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x2f 0x7ff7295d02f9 in ??? ()
#0x30 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x31 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x32 0x7ff7295d02f9 in ??? ()
#0x33 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x34 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x35 0x7ff7295d02f9 in ??? ()
#0x36 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x37 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x38 0x7ff7295d02f9 in ??? ()
#0x39 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x3a 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x3b 0x7ff7295d02f9 in ??? ()
#0x3c 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
#0x3d 0x7ff7295d0226 in CUnit::DispatchOrder (__formal=0x2b6f7264, first=?, last=?)
#0x3e 0x7ff7295d02f9 in ??? ()
#0x3f 0x7ff7295ce73f in CUnit::DoNextTasks (this=?)
Thread 13676: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 8472: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 5872: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 12928: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 13796: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 14264: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 13964: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 13932: RIP=0x00007FF86DD85954 C:\WINDOWS\SYSTEM32\ntdll.dll +0x165954 (ZwWaitForWorkViaWorkerFactory)
Thread 6580: RIP=0x00007FF86DD82324 C:\WINDOWS\SYSTEM32\ntdll.dll +0x162324 (ZwDelayExecution)
Thread 13808: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 12040: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 6352: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 8396: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 13528: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 6316: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 4124: RIP=0x00007FF86DD827F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1627F4 (ZwWaitForMultipleObjects)
Thread 13516: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 7276: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 12724: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 2792: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 3740: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 704: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 8420: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 3856: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 8412: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 2692: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 13776: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 10996: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 6112: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 11384: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 8592: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 7224: RIP=0x00007FF86DD827F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1627F4 (ZwWaitForMultipleObjects)
Thread 8392: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 12292: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 12744: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 12736: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 12456: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 13108: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 9980: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 10008: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 8772: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 10016: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 9392: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 5256: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 10376: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 10636: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 10704: RIP=0x00007FF86DD82324 C:\WINDOWS\SYSTEM32\ntdll.dll +0x162324 (ZwDelayExecution)
Thread 11636: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 10116: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 8576: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 12120: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 12204: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 12220: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 12216: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13508: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13672: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13160: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13668: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 14104: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13812: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13500: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13888: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 4492: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 3984: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 14116: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13876: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 10944: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 11652: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 10504: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 10488: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 8428: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 10780: RIP=0x00007FF86DD81DC4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161DC4 (NtRemoveIoCompletion)
Thread 13916: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 2800: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 13980: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 10796: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 2356: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 10148: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 8360: RIP=0x00007FF86DD81D24 C:\WINDOWS\SYSTEM32\ntdll.dll +0x161D24 (NtWaitForSingleObject)
Thread 2492: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 10672: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 10696: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 1160: RIP=0x00007FF86DD858F4 C:\WINDOWS\SYSTEM32\ntdll.dll +0x1658F4 (ZwWaitForAlertByThreadId)
Thread 9172: RIP=0x00007FF86DD82324 C:\WINDOWS\SYSTEM32\ntdll.dll +0x162324 (ZwDelayExecution)
Thread 2184: RIP=0x00007FF86DD85954 C:\WINDOWS\SYSTEM32\ntdll.dll +0x165954 (ZwWaitForWorkViaWorkerFactory)
=== End Hang Diagnostic ===
[18:12:06.822] Thread 6748 [MAIN]: RIP=0x00007FF72873E231 K:\Warcraft III Offline\retail\x86_64\Warcraft III.exe +0x34E231 (AgentRefMini::GetAgentInternal)
[18:12:09.822] Thread 6748 [MAIN]: RIP=0x00007FF72A2739AE K:\Warcraft III Offline\retail\x86_64\Warcraft III.exe +0x1E839AE (agsSetDisplayMode)
 
Really useful tool, I've been struggling with a bug where the game crashes when doing a combat stress test at between 7 minutes to 3 hours ingame so it was wildly random, but this tool managed me to pinpoint it was likely Drain Life based ability losing its handle (?) when a unit its draining was abrubtly removed:
[14:23:18.363] ACCESS_VIOLATION #2: READ addr=0x0000000000000178 RIP=0x00007FF6A336BDC1
Module: C:\Program Files (x86)\Warcraft III\retail\x86_64\Warcraft III.exe +0x8BBDC1 (CAbilityDrain::OnEvent)

and

#0x0 0x7ff6a2e71de4 in Position::GetPathingRegion (this=0x0)
#0x1 0x7ff6a3c3b912 in CUnit::IsTouching (doLinkedModels=0x2760d275588, model=?)
#0x2 0x7ff6a336bded in CAbilityDrain::OnEvent (this=?, event=?)

I would've likely never found that out otherwise. :thumbs_up:
 
Last edited:
Back
Top