- Dump File:
D:\Creality\CrashDumps\CrealityScan 4.exe_251225_233457.dmp(1.1 GB) - PDB File:
D:\Projects\OrbbecSDK_v2\build_win_x64\bin\RelWithDebInfo\OrbbecSDK.pdb - Crash Address:
OrbbecSDK+0x115c20 - Exception: Access Violation (c0000005 - likely null pointer dereference)
- Open Visual Studio 2022
- Debug → Open Dump File → Select
CrealityScan 4.exe_251225_233457.dmp - When prompted for debugging symbols:
- Click Settings → Symbol Settings
- Add folder:
D:\Projects\OrbbecSDK_v2\build_win_x64\bin\RelWithDebInfo - Also add:
SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols
- Click "Debug Mixed" to analyze
- In Debug Console, run:
!analyze -v kp lm m OrbbecSDK - Look for:
- Exception code (should be c0000005)
- Faulting instruction address
- Call stack leading to crash
- Which parameter was null/invalid
- Download WinDbg Preview from Microsoft Store, OR
- Download Windows Debuggers from Windows SDK
- Open WinDbg Preview or
windbg.exe - File → Open Dump File → Select the
.dmpfile - In Command Window, paste:
.symfix .sympath+ D:\Projects\OrbbecSDK_v2\build_win_x64\bin\RelWithDebInfo .reload /f OrbbecSDK.dll !analyze -v - Key commands:
ln OrbbecSDK+0x115c20 // Shows function name at offset lm m OrbbecSDK // Module info and symbols status kp // Full stack with parameters dds rsp L20 // Dump stack memory ? poi(<address>) // Dereference pointer (check if null)
# Set up environment
$WinKitPath = "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64"
$cdb = "$WinKitPath\cdb.exe"
# Create command script
@"
.sympath+ D:\Projects\OrbbecSDK_v2\build_win_x64\bin\RelWithDebInfo
.reload /f
!analyze -v
ln OrbbecSDK+0x115c20
kp
q
"@ | Out-File -FilePath "$env:TEMP\analyze.txt" -Encoding ASCII
# Run analysis
& $cdb -y "D:\Projects\OrbbecSDK_v2\build_win_x64\bin\RelWithDebInfo" `
-z "D:\Creality\CrashDumps\CrealityScan 4.exe_251225_233457.dmp" `
-cf "$env:TEMP\analyze.txt"EXCEPTION_RECORD: xxxxxxxx
ExceptionAddress: 00007ffc`12345c20
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
[0]: 0000000000000000 (Read)
[1]: 0000000000000000 (Address accessed)
- Top frame = crash location (should show function name if PDB matched)
- Look for device-related functions like:
DeviceManager::enumDevices()Pipeline::start()Sensor::readFrame()- Property accessors
OrbbecSDK!DeviceManager::queryDevice+0x1a2
-> This indicates a null device pointer in queryDevice()
OrbbecSDK!DeviceBase::getSensor+0x28
-> Sensor object not initialized before access
OrbbecSDK!Frame::getData+0x10
-> Trying to read from null frame pointer
Once you run the dump analysis, collect:
- Exact function name where crash occurs
- Call stack (first 10-15 frames)
- Parameter values visible in stack dump
- Device model being used when crash occurred
- Steps to reproduce if known
If WinDbg says SYMOPT_EXACT_SYMBOLS failure:
- The rebuilt DLL/PDB may not match the shipped version
- You can still use
!uniqstackto get a generic stack trace - Contact Orbbec/Creality for official PDBs matching their build
- Alternative: Rebuild OrbbecSDK with exact same flags as their build
If crash is in device enumeration:
- → Add null checks before device access
- → Test device insertion/removal during startup
If crash is in stream processing:
- → Validate frame before use
- → Check stream state before reading
If crash is in property accessor:
- → Add try-catch around vendor-specific properties
- → Check device support before accessing property
If crash is race condition:
- → Add mutex/locks around device list
- → Use observer pattern safely
- Dump:
D:\Creality\CrashDumps\CrealityScan 4.exe_251225_233457.dmp - PDB:
D:\Projects\OrbbecSDK_v2\build_win_x64\bin\RelWithDebInfo\OrbbecSDK.pdb - DLL (for comparison):
D:\Projects\OrbbecSDK_v2\build_win_x64\win_x64\bin\OrbbecSDK.dll - Analysis docs: See
OffsetAnalysis.mdfor pattern matching
Next: Run Visual Studio or WinDbg with above steps to identify the exact crashing function.