I’ve been having some video problem while playing Guild Wars 2, and after one recent episode of 4 crashes in 2 minutes, I decided to investigate. The symptom is: game freezes (for a second or two), minimizes so I can see my desktop for a split second, then comes back. Total time “frozen” is 5 or 6 seconds, and most of the time I’m fine in-game. However, I’ve had this happen mid-fight (I come back to a character with damaged armor), I’ve had this happen as I was running in the vicinity of a precipice, etc. Sometimes the game crashes out entirely and I have to restart.

I’ve tried upgrading to the latest video driver, but it still happens. The next thing I’ll try is reducing every graphics option, hoping that a higher setting is triggering the problem.
The first thing I tried was looking in the Windows Event Viewer (Computer -> Manage; then open Event Viewer -> Windows Logs -> System). My recent 4 crashes were easy to spot:

The note about the video driver recovering really means “TDR thought the system froze so it terminated and restarted the graphics driver”.
There wasn’t too much info to glean, so I dug a bit deeper, and located the minidumps these crashes create. I found them in the c:\windows\LiveKernelReports\WATCHDOG directory, and counted them up. There were 113 of them. Yes, 113. One hundred thirteeen, over the last month I’ve been playing GW2. According to /age in game, I’ve played a total of 90 hours across all characters. So I’m averaging a video driver crash/restart every ~48 minutes. Not too frequent, but enough to drive me a little nuts.
Now, to decipher what the minidumps contain, I started up a debugger. I used windbg, a simple and free yet functional/powerful debugger. It used to be directly downloadable from Microsoft, but these days it comes bundled with another SDK or DDK.
I opened the minidump with windbg (File-> Open Crash Dump) and poked around. Since dumps aren’t live debuggable systems, it is limited to looking at registers and a stack trace, but I was very curious to find out anything more. Initially, windbg complained about bad symbols so I pointed it to Microsoft’s symbol server:
6: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
VIDEO_TDR_TIMEOUT_DETECTED (117)
The display driver failed to respond in timely fashion.
(This code can never be used for real bugcheck).
Arguments:
Arg1: fffffa8006131010, Optional pointer to internal TDR recovery context (TDR_RECOVERY_CONTEXT).
Arg2: fffff8800f36e584, The pointer into responsible device driver module (e.g owner tag).
Arg3: 0000000000000000, The secondary driver specific bucketing key.
Arg4: 0000000000000000, Optional internal context dependent data.
Debugging Details:
------------------
Unable to load image nvlddmkm.sys, Win32 error 0n2
*** WARNING: Unable to verify timestamp for nvlddmkm.sys
*** ERROR: Module load completed but symbols could not be loaded for nvlddmkm.sys
FAULTING_IP:
nvlddmkm+14b584
fffff880`0f36e584 ?? ???
DEFAULT_BUCKET_ID: GRAPHICS_DRIVER_TDR_TIMEOUT
TAG_NOT_DEFINED_202b: *** Unknown TAG in analysis list 202b
BUGCHECK_STR: 0x117
PROCESS_NAME: System
CURRENT_IRQL: 0
STACK_TEXT:
fffff880`03f1b630 fffff880`047555f7 : fffffa80`06131010 fffff880`047a1ec4 fffffa80`06131010 fffff880`04723843 : watchdog!WdDbgReportRecreate+0xa3
fffff880`03f1bb50 fffff880`047562bc : fffff8a0`242b0130 fffff8a0`242b0130 00000000`00000080 fffffa80`06131010 : dxgkrnl!TdrUpdateDbgReport+0xcb
fffff880`03f1bba0 fffff880`0472a6b3 : 00000000`00000001 fffffa80`0a3a1000 00000000`00000000 fffff880`0000004a : dxgkrnl!TdrCollectDbgInfoStage2+0x220
fffff880`03f1bbd0 fffff880`04756e0f : fffffa80`0a3ab658 ffffffff`fffe7960 fffffa80`06131010 00000000`00000000 : dxgkrnl!DXGADAPTER::Reset+0xef
fffff880`03f1bc80 fffff880`04637ec1 : fffffa80`061665b0 00000000`00000080 00000000`00000000 fffffa80`0a3ab010 : dxgkrnl!TdrResetFromTimeout+0x23
fffff880`03f1bd00 fffff800`03122e6a : 00000000`fffffc32 fffffa80`0a3a9610 fffffa80`054eeb30 fffffa80`0a3a9610 : dxgmms1!VidSchiWorkerThread+0x101
fffff880`03f1bd40 fffff800`02e7cec6 : fffff800`02ffee80 fffffa80`0a3a9610 fffff800`0300ccc0 fffff880`03f1be40 : nt!PspSystemThreadStartup+0x5a
fffff880`03f1bd80 00000000`00000000 : fffff880`03f1c000 fffff880`03f16000 fffff880`0c79ed70 00000000`00000000 : nt!KxStartSystemThread+0x16
STACK_COMMAND: .bugcheck ; kb
FOLLOWUP_IP:
nvlddmkm+14b584
fffff880`0f36e584 ?? ???
SYMBOL_NAME: nvlddmkm+14b584
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: nvlddmkm
IMAGE_NAME: nvlddmkm.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 503f8bb8
FAILURE_BUCKET_ID: X64_0x117_IMAGE_nvlddmkm.sys
BUCKET_ID: X64_0x117_IMAGE_nvlddmkm.sys
Followup: MachineOwner
---------
This just confirms the likely culprit is the driver for my graphics card, nvlddmkm.sys. The problem apparently occurs at offset 14b584 in the driver, and somebody would need source code or symbols to figure out what that is.
There really isn’t much I can do at this point, other than maybe tracking down a way to report bugs to the vendor, and otherwise wait for an update and hope that fixes my issue. But at least I confirmed the problem, reported it to Microsoft (via the error reporting service)… who knows maybe enough reports will come in that somebody will be motivated to investigate.
As far as playing, the timeout/crash/restart is very annoying, but other than several character deaths, it hasn’t impacted me too much. Typically I’m soloing or occasionally joining other guildies for a dungeon. If I were heavy into WvWvW I’d undoubtedly hate giving up a free kill every now and then due to ~5 seconds of client freezes.
I’m going to lower every graphics option, hoping that reduces the chances of this happening.