javascript - WebGL JavaScript 游戏在 Chrome 中导致 STATUS_ACCESS_VIOLATION
问题描述
我正在使用 WebGL 开发 HTML5 游戏,在 Edge 和 Chrome 上运行它时遇到了这个奇怪的问题。页面将随机转到“Aw,Snap!” 状态为 STATUS_ACCESS_VIOLATION 的错误页面,让我完全退出。我推断这不是由于游戏中的任何特定状态,因为它会在任何位置的任何时间后随机发生,所以我能想到的唯一常见线程是使用 WebGL 时。
我使用 WinDbg 分析了 Chrome 转储文件,发现错误状态列为“0xc0000005 - 0x%p 处的指令引用了 0x%p 处的内存。内存不能为 %s。” 我的着色器会导致这种情况吗?如果这是一个 JavaScript 问题,我想我会在控制台中看到它,并且它不会使整个页面崩溃。我在网上找不到任何可能导致此问题的具体信息,更不用说如何缩小代码中的问题范围了。这是我的着色器代码和转储信息。
顶点着色器:
attribute vec2 a_position;
attribute vec2 a_texcoord;
uniform mat3 u_positionMatrix;
uniform mat3 u_textureMatrix;
varying vec2 v_texcoord;
void main() {
gl_Position = vec4((u_positionMatrix*vec3(a_position,1)).xy,0,1);
v_texcoord = (u_textureMatrix*vec3(a_texcoord,1.0)).xy;
}
片段着色器:
precision mediump float;
uniform sampler2D u_texture;
uniform vec4 u_blend;
varying vec2 v_texcoord;
void main() {
gl_FragColor = texture2D(u_texture,v_texcoord)*u_blend;
}`);
转储分析:
*** WARNING: Unable to verify checksum for combase.dll
KEY_VALUES_STRING: 1
Key : AV.Fault
Value: Read
Key : Analysis.CPU.mSec
Value: 1031
Key : Analysis.DebugAnalysisProvider.CPP
Value: Create: 8007007e on COMPUTER
Key : Analysis.DebugData
Value: CreateObject
Key : Analysis.DebugModel
Value: CreateObject
Key : Analysis.Elapsed.mSec
Value: 1258
Key : Analysis.Memory.CommitPeak.Mb
Value: 336
Key : Analysis.System
Value: CreateObject
Key : Timeline.Process.Start.DeltaSec
Value: 1167
Key : WER.Process.Version
Value: 85.0.4183.102
ADDITIONAL_XML: 1
OS_BUILD_LAYERS: 1
NTGLOBALFLAG: 0
PROCESS_BAM_CURRENT_THROTTLED: 0
PROCESS_BAM_PREVIOUS_THROTTLED: 0
CONTEXT: (.ecxr)
rax=00007669035b8b00 rbx=00007669035cfb18 rcx=0000000000000000
rdx=00007669035c6520 rsi=0000023237a1e100 rdi=0000023237a1df00
rip=00007ffc13c68c8e rsp=000000ec40bff008 rbp=00000232367f5a80
r8=0000000000000080 r9=00007ffc13c68c80 r10=00007ffc0dd5f8e0
r11=0000766903209580 r12=0000000000000080 r13=0000000000000000
r14=000000000000001a r15=000000ec40bff030
iopl=0 nv up ei pl nz na po nc
cs=0033 ss=0000 ds=0000 es=0000 fs=0053 gs=002b efl=00010206
chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2750d6e:
00007ffc`13c68c8e 488b8188050000 mov rax,qword ptr [rcx+588h] ds:00000000`00000588=????????????????
Resetting default scope
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 00007ffc13c68c8e (chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x0000000002750d6e)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000000
Parameter[1]: 0000000000000588
Attempt to read from address 0000000000000588
PROCESS_NAME: chrome.exe
READ_ADDRESS: 0000000000000588
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
EXCEPTION_CODE_STR: c0000005
EXCEPTION_PARAMETER1: 0000000000000000
EXCEPTION_PARAMETER2: 0000000000000588
STACK_TEXT:
000000ec`40bff008 00007ffc`0dd69097 : 00000232`00000002 00000232`367ce330 3f800000`00000000 00003780`5a9f15b6 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2750d6e
000000ec`40bff010 00007ffc`13c68d26 : 00003780`5a9f0a26 00007669`03108270 00000000`00000000 00000000`0000000c : chrome!ovly_debug_event+0x65b587
000000ec`40bff0c0 00007ffc`13ea06d9 : 00000000`0352d800 00007ffc`140f1af6 00003780`5a9f0a16 00007669`03209580 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2750e06
000000ec`40bff110 00007ffc`140e5f2b : 000000ec`40bff278 00000000`00000080 00001c74`976653c8 00000000`00000080 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x29887b9
000000ec`40bff180 00007ffc`140e684e : 00000000`00000000 00007ffc`13ea5c18 00007669`03180bc8 00007ffc`140f1143 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bce00b
000000ec`40bff1f0 00007ffc`140e69d3 : 00007669`0301c9a0 00007669`03009b60 00000000`00000000 00007ffc`13c632cb : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bce92e
000000ec`40bff250 00007ffc`13ea0a1f : 00007ffc`00000162 00007ffc`140e8bc0 00000000`00000000 00007ffc`13c41d01 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bceab3
000000ec`40bff2a0 00007ffc`13ea0649 : 00007669`031800e0 00007ffc`140f1af6 00000000`00000000 00007669`030089e0 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2988aff
000000ec`40bff320 00007ffc`140e5f2b : 00000000`3f800000 00000000`00000000 40922696`0999dcb6 00007ffc`11d18cd6 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2988729
000000ec`40bff390 00007ffc`140e684e : 00000000`00000000 00007ffc`13ea5c18 00007669`03180a08 00007ffc`140f1143 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bce00b
000000ec`40bff400 00007ffc`140e69d3 : 00007669`031800e0 00007ffc`140f1af6 00000000`00000000 00007ffc`13c632cb : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bce92e
000000ec`40bff460 00007ffc`13ea0a1f : 00007669`035cf2c0 00007ffc`158e2cf0 00007669`03011be0 00003780`5a9f0ec6 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bceab3
000000ec`40bff4b0 00007ffc`13ea0649 : 000000ec`40bff580 00000000`00000000 000000ec`40bff820 00007ffc`13ea6459 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2988aff
000000ec`40bff530 00007ffc`140e5f2b : 00000000`00000080 000002ef`524bd980 000002ef`524bdb08 00007ffc`140ec1d6 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2988729
000000ec`40bff5a0 00007ffc`140e684e : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bce00b
000000ec`40bff610 00007ffc`140e69d3 : 00007669`03057350 00007ffc`13c4a157 00007669`030a0480 00007ffc`140e8e0d : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bce92e
000000ec`40bff670 00007ffc`140eaacd : 00000232`37e18f00 5a9f0c01`5e6bc8ec 00007669`031800e0 00007669`03008ac0 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bceab3
000000ec`40bff6c0 00007ffc`143a5370 : 00000232`3ae65910 00000000`00000020 00007669`030572a0 00000000`03057201 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2bd2bad
000000ec`40bff7a0 00007ffc`143a4d6b : 00000232`35c70740 00000000`00000000 00003780`5a9f0206 00007ffc`0fc8b3b0 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2e8d450
000000ec`40bff8e0 00007ffc`124e28d4 : 000072fd`ab0fe02e 00007ffc`0cfa7f28 00000000`00000000 00007ffc`0cfa7d19 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0x2e8ce4b
000000ec`40bff9e0 00007ffc`0dd67bb3 : 00000000`ffffffff 00003780`5a9f0036 00007ffc`5dd34e80 00000000`00000004 : chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+0xfca9b4
000000ec`40bffad0 00007ffc`0dd32e2e : 00000232`33c88b00 00000000`00000000 00000000`00000000 00000000`00000000 : chrome!ovly_debug_event+0x65a0a3
000000ec`40bffb80 00007ffc`0dd2c614 : 000000ec`40bffcb0 000000ec`40bffcb8 00007ffc`0cfa98e8 00000000`00000000 : chrome!ovly_debug_event+0x62531e
000000ec`40bffc80 00007ffc`0fcce22c : 000000ec`40bffd48 00000232`31b8bde0 00000000`00000000 00000000`00000000 : chrome!ovly_debug_event+0x61eb04
000000ec`40bffd10 00007ffc`5dd26fd4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : chrome!CrashForExceptionInNonABICompliantCodeRange+0x9f9edc
000000ec`40bffd90 00007ffc`5e6fcec1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14
000000ec`40bffdc0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21
SYMBOL_NAME: chrome!RelaunchChromeBrowserWithNewCommandLineIfNeeded+2750d6e
MODULE_NAME: chrome
IMAGE_NAME: chrome.dll
STACK_COMMAND: ~17s ; .ecxr ; kb
FAILURE_BUCKET_ID: NULL_CLASS_PTR_READ_c0000005_chrome.dll!RelaunchChromeBrowserWithNewCommandLineIfNeeded
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
IMAGE_VERSION: 85.0.4183.102
FAILURE_ID_HASH: {5cde37ba-ec14-dc5b-5cfd-48d1b2780b55}
Followup: MachineOwner
什么甚至会导致这种情况发生?我正在运行 Windows 10 并通过本地网络服务器访问游戏。这也发生在我的手机上运行游戏。这种崩溃不会在 Firefox 中发生。这可能与我的计算机或我的着色器有关,或者哪种 JavaScript 实践可能导致这样的事情?
解决方案
推荐阅读
- java - 使用一个文件,将 60 个随机等级,数值介于 50 和 100 之间的值写入一个文件。读取文件,计数并显示为 A - f 级
- python - Python3 朋友的朋友
- java - SQL 创建数据库抛出 'MySQLSyntaxErrorException: Specified key was too long; 最大密钥长度为 767 字节
- c++ - 类对象集的 C++ 行为意外
- c - 分配内存的问题被中止(核心转储)
- javascript - 如何使用相同的类自动完成相同的输入,但一次只自动完成一个输入
- heroku - 卡在构建成功
- python - flask -- 改变响应的输出
- c++ - 2D 白色网格不显示在背景上方
- javascript - 如何使用 document.createElement 从 React 设置 onClick?