Client Error Analysis

From wowdev
Revision as of 00:00, 5 March 2018 by Schlumpf (talk | contribs) (Created page with "When the WoW client crashes, the error logs usually are not useful to users. They often do contain exact information about what failed though, which can be analysed with rever...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

When the WoW client crashes, the error logs usually are not useful to users. They often do contain exact information about what failed though, which can be analysed with reverse engineering the functions mentioned in the error logs. In order to avoid repeating this process, this page tries to give analysis on commonly encountered errors as well as how to resolve them.

The information on this page is highly bound to the client version used. To navigate this site, first choose your client version and architecture, then the error type and follow the instructions on how to read the entries there. Any not entirely exact match is likely to be related but not exactly the described issue.

If your combination of values does not appear in this list, you may try to request help on the usual forums (modcraft, mcnet) which probably linked you here, or try the Wiki Talk page for this page. In either case, people who try to analyse your error will need the full error log as well as the exact client version (including if it is a special, non-official version) of your crash in order to analyse it.

Note that some of these sections may list your exact error but no analysis or fix. Sorry if that's the case. You may want to pressure someone to investigate that issue as mentioned in the paragraph above. Usually it means that the error is more complex though, so an incentive might be useful.

3.3.5.12340 Win32

#132 (0x85100084) Fatal Exception

The error messages in this category follow the form

ERROR #132 ...
Program ...
Exception ... (TYPE) ... at ...

The instruction at INSTRUCTION referenced memory at DATA.
The memory could not be ACCESS_TYPE.

The entries in this group are split by TYPE. Below that, the entries are then referring to INSTRUCTION ACCESS_TYPE DATA.

ACCESS_VIOLATION

0x004057FB read 0x00000004

The server sent you to an invalid map id. The client just finished transfering you there and failed getting the internal name of the map in order to load the ADTs, as the map MapRec entry does not exist in your client.

0x004E0A9B read 0x0000001C

0x007A07E4 read 0x******** (random address on heap)

EAX=1D30EF51  EBX=25B15BA0  ECX=00000006  EDX=00000040  ESI=000001C9
EDI=25B141C0  EBP=036DFA6C  ESP=036DFA58  EIP=007A07E4  FLG=00010212
CS =0023      DS =002B      ES =002B      SS =002B      FS =0053      GS =002B

007A07E4 036DFA6C
007B56C4 036DFA88
007B6B59 036DFBBC
00783357 036DFBD8
004FAAE4 036DFC98
004FB036 036DFD24
00485128 036DFDE4
00494F67 036DFE00
0049545B 036DFE1C
004A8A42 036DFEE8
00480B79 036DFF18
0047DC89 036DFF40
0047F29A 036DFF94
0047F2E1 036DFFAC
0040B7D8 036DFFB4

0x007B31F8 read 0x00000010

This issue is caused by the ADT referencing a detail doodad ID that is not given in the DBC, either by saving incorrectly or not editing the DBC correctly. This can be fixed by adding an entry to GroundEffectTextureRec for all IDs or by removing the id from the ADT.

This is a bug that has happened with certain versions of Noggit which should be fixed these days. The detail here is ADT's MCNK's ReallyLowQualityTextureingMap which references an non-existing layer.

Basically, each chunk can contain 4 textures (each on a layer), which each can have a specific applied groundeffect ID. The ID is further defined within the .dbc, however, this is not important. The most important thing is simple; Wow tries to visual a groundeffect for a texture that is not existing. On a chunk with 3 layers, but 4 ground effects noted, it is bound to lead to a crash.

A simple fix is easy; simply use the texture painter, apply some texture, set it to some size but the lowest speed and apply it onto the adt, until every chunk has 4 layers. The crashes stop.

0x007B4D61 read 0x00000071

EAX=00000001  EBX=00000000  ECX=00000001  EDX=00000FC0  ESI=1155D030
EDI=00CE87D0  EBP=0385DA28  ESP=0385D9B4  EIP=007B4D61  FLG=00010202
CS =0023      DS =002B      ES =002B      SS =002B      FS =0053      GS =002B

007B4D61 0385DA28
007B5CF5 0385FA8C
007B6B4E 0385FBBC
00783357 0385FBD8
004FAAE4 0385FC98
004FB036 0385FD24
00485128 0385FDE4
00494F67 0385FE00
0049545B 0385FE1C
004A8A42 0385FEE8
00480B79 0385FF18
0047DC89 0385FF40
0047F29A 0385FF94
0047F2E1 0385FFAC
0040B7D8 0385FFB4

0x007C59EA read 0x1F312341

0x007C8DA0 read 0x******** (random address on heap)

Broken MLIQ chunk in WMO. In CMapObj::IdentifyLegacyLiquidType(): what the wiki refers to as "types?" appears to have too few entries, never ending in a byte&0xf that is not 0xf.

0x007D74B6 read 0x******** (random address on heap)

Reading MOMT of an WMO went terribly wrong. Either the file's size is smaller than it should be, opening the file failed somehow of the chunks before MOMT (MOTX) indicate a bad size. You may encounter this error with WMOs "ported" from other versions (i.e. MoP+). You should never encounter thus with not a single WMO on the ADT. Removing them all or fixing the corrupted one should fix this thus.

It should be possible to reproduce this with an WMO being

00 00 00 00  00 00 00 00  00 00 00 00  FF FF FF FF 00

only. (I.e. infinite MOTX, thus invalid access on MOMT.)

0x007F69D1 read 0x00000000

Trying to call GtBarberShopCostBaseRec for an entry that does not exist. Fix your game tables.

0x008347AA read 0x00000008

Related to MCIN according to Will.

0x00836D11 read 0x00000000

0x776B2A83 read 0x5C523282

Caused by MAX_RACES (charactercreate.lua) not matching the amount of buttons in charactercreate.xml.

#134 (0x85100086) Fatal Condition

Errors of form ERROR #134 (0x85100086) Fatal Condition usually have no other easy to understand content in the error log.

To identify your error in this list, you will need to look at the stack trace of the current thread (Search your error log for --- Thread ID: xxxx [Current Thread] ---. This is likely to be the first block after the CVars and GX Info blocks). It will likely be enough if the first few lines match. Only the first column in the error log is relevant and given here.

00772AB5 008889CE 006D7A9E 00725F73...

The client is trying to get the collision volume for a unit. The CreatureDisplayInfoRec of that unit does not exist in the client. If the CreatureDisplayInfoRec of that unit exists in the client, it references a CreatureModelDataRec that does not exist.