This page documents the Autodesk CER crash report format used by products before 2025: the human-readable dmpuserinfo.xml file. For 2025 and newer, see the CER v7 .pb format reference.
What follows is the format as it exists in real crash reports from Civil 3D, AutoCAD, Plant 3D, Revit and Desktop Connector, not a spec Autodesk published. Each field carries a presence rating so you know what to expect before you write a parser: Always means every report has it, Usually means most do, Common means roughly half, Sometimes means a minority, Rare means do not count on it. Knowing a field exists is worth little if it is almost never there.
The shape of the file
One crash, one file, everything inside it. Root element is <CERInfo>, with two attributes: @ClientSemVersion (dates the CER client build, e.g. 6.3.2+20230824) and @ClientVersion (major version, 6 for this format). Both always present.
Encoding is UTF-8 XML, sometimes with a BOM, mixing attributes, elements and CDATA. Files are consistently well formed. Read it with [xml](Get-Content -Raw) in PowerShell or ElementTree in Python. DxDiag and GraphicsInfoRaw children are CDATA wrapped, so use a CDATA-aware getter with an InnerText fallback.
Section index
| Section | Presence | Carries |
|---|---|---|
ProcessInfo | Always | memory and error state at crash |
UserInfo | Always | identity, crash id, drawing, open files |
upipackage | Always | installed product inventory, crashing product flagged |
OSInfo | Always | Windows version and kernel |
LocaleInfo | Always | user and system locale |
CrashHistory | Always | CER upload reliability counters |
WininetInfo | Always | WinINet version |
MC3Info | Always | analytics session and user hash |
DeviceInfo | Always | hashed device identity |
ProductInformation | Always | platform build, session counts, GsConfig |
AppCDATA | Always | command chain, managed stack, GDI tail |
DxDiagInfo | Always | system and installed GPU |
VideoDriverInfo | Always | AMD packaging version |
AppInformation | Usually | friendly product name and build |
GraphicsInfo | Usually | active D3D adapter as a text blob |
GraphicsInfoRaw | Usually | same, as structured children |
GraphicsDriverInfo | Usually | AutoCAD hdi driver |
OpenGLInfo | Common | active GL renderer |
RuntimeInformation | Rare | inline managed exception |
LicenseInfo | Vestigial | licensing state |
GDI (top level) | Vestigial | object counts |
ProcessInfo
<ProcessInfo AvailPageFile="1BE15D000" AvailPhysicalMem="3522A1000" AvailVirtualMem="7FEE0DE88000" CerMode="1" ErrNo="2" LastWin32Error="0"/>
| Attribute | Presence | How to read it |
|---|---|---|
@AvailPageFile | Always | hex bytes, convert base 16 |
@AvailPhysicalMem | Always | hex bytes |
@AvailVirtualMem | Always | hex bytes |
@CerMode | Always | CER client mode flag |
@ErrNo | Sometimes | CRT errno at crash |
@LastWin32Error | Sometimes | Win32 GetLastError |
UserInfo
<UserInfo SerialNum="000-00000000" UserCanBeContacted="yes" ComputerName="PC-11617"> <UserName value=""/> <UserPhone value=""/> <UserEmail value="user@example.com"/> <UserSubscription email="user@example.com" macID="{GUID}" userId=""/> <ErrorDescription AllowRT="1" CrashDate="06/27/2025" CrashID="1520c2d8-..." id="6"/> <Metrics CalendarUptime="2206861177" RequiredSend="0" WaitDur="25000"/> <WorkingDocument name="Hydraulics_Working_RoadsideDrainage.dwg"/> <Some.Other.File.dwg name="..." active="true"/></UserInfo>
| Path | Presence | Notes |
|---|---|---|
@SerialNum | Always | always masked as 000-00000000 |
@UserCanBeContacted | Always | yes or no |
@ComputerName | Rare | newer clients only. The only machine name in the XML |
UserName@value | Always | usually empty. The folder name is the canonical username |
UserPhone@value | Always | usually empty |
UserEmail@value | Always | user email |
UserSubscription@email | Always | subscription email |
UserSubscription@macID | Always | subscription machine GUID |
UserSubscription@userId | Always | usually empty |
ErrorDescription@CrashDate | Always | MM/DD/YYYY |
ErrorDescription@CrashID | Always | crash GUID, joins the backend CER number |
ErrorDescription@AllowRT | Always | round trip allowed |
ErrorDescription@id | Always | error description template id |
Metrics@CalendarUptime | Always | 100 ns ticks. Divide by 1e7 then 3600 for hours |
Metrics@RequiredSend | Always | CER submission policy flag |
Metrics@WaitDur | Always | dialog wait in milliseconds |
WorkingDocument@name | Usually | the active drawing, name or full path |
child <*.dwg|dwt|dxf|dgn name= active=> | varies | the open-files list. The element tag is the filename, so match on the tag, not an XPath. @active="true" wins |
That open-files list is the one thing the newer format has no answer for. It is also where a project number comes from once you strip the filename down, which is what lets crash data join drawing audit findings.
upipackage
<upipackage> <upivalue requestingapp="true" type="product" version="1.0"> <level id="CIV3D" name="productline"> <level id="2024" name="release"> <level id="{28B89EEF-7100-0409-2102-CF3F3A09B77D}" name="master"> <level id="13.6.2053.0" name="build"/> ... one upivalue per installed product ... <upi_error .../></upipackage>
| Path | Presence | Notes |
|---|---|---|
upivalue | Always | one per installed product |
upivalue@requestingapp | on one entry | "true" marks the product that crashed |
upivalue@type, @version | Always | entry type and schema version |
level[@name="productline"]@id | Always | product code. Seen: CIV3D, ACD, ARCHDESK, ARDES, VEHTRK, RVT, PLC0000013, PLC0000022, PLC0000037 |
level[@name="release"]@id | Always | release year. Drives the 2020 side-by-side check |
level[@name="master"]@id | Always | master GUID. Encodes the release: 5100 is 2022, 7100 is 2024, 9100 is 2026 |
level[@name="build"]@id | Always | the build number, e.g. 13.6.2053.0 |
upi_error | Sometimes | inventory collection failed. Blank product here means “failed”, not “none installed” |
Only the requestingapp="true" entry is the crashing product. Newer builds routinely appear in this list as merely installed, so never take the highest version you see as the one that crashed.
OSInfo, LocaleInfo, WininetInfo
| Path | Presence | Notes |
|---|---|---|
OSInfo@BuildNumber | Always | Windows display build, e.g. 26100 |
OSInfo@MajorVersion, @MinorVersion | Always | always 10.0 on Win10 and Win11. Use BuildNumber to tell them apart |
OSInfo@KernelBuildNum, @KernelMajorVersion, @KernelMinorVersion, @KernelReleaseNum | Always | kernel identity. ReleaseNum is the UBR patch level |
OSInfo@PlatformId, @CSDVersion, @ServicePackMajor, @ServicePackMinor, @SuiteFlags | Always | legacy OS descriptors |
OSInfo@*_Legacy (BuildNumber, CSDVersion, MajorVersion, MinorVersion, PlatformId, ServicePackMajor, ServicePackMinor, SuiteFlags) | Always | compatibility-shimmed twins, e.g. MajorVersion_Legacy 6, BuildNumber_Legacy 9200. Ignore these, use the non-Legacy ones |
LocaleInfo/LocalUserDefault and LocalSystemDefault, each with @ICountry, @IDefaultAnsiCodepage, @IDefaultCodepage, @IDefaultCountry, @IDefaultLanguage, @ILanguage | Always | constant across a single-locale fleet |
WininetInfo@WininetBuildNum, @WininetMajorVersion, @WininetMinorVersion, @WininetReleaseNum | Always | WinINet version block |
CrashHistory, MC3Info, DeviceInfo
| Path | Presence | Notes |
|---|---|---|
CrashHistory@Created | Always | reports created on this machine |
CrashHistory@BackendFailed | Common | uploads that failed |
CrashHistory@BackendTimeout | Common | uploads that timed out |
CrashHistory@BackendProcessing | Sometimes | uploads still in flight |
CrashHistory@BackendCompleted | Rare | confirmed uploads |
MC3Info@sessionId | Always | analytics session GUID |
MC3Info@userId | Always | three SHA-256 hashes joined with underscores |
DeviceInfo@DeviceIDv2 | Always | the same triplet joined with ampersands. Joins the .pb SP/DEVICEID2 |
When BackendFailed or BackendTimeout are non-zero, crash counts are floors rather than totals. This block has no equivalent in the newer format.
AppInformation, ProductInformation, GsConfig
| Path | Presence | Notes |
|---|---|---|
AppInformation@name, @version | Usually | friendly product and build, e.g. Autodesk Civil 3D 2024 / 13.6.2053.0 |
ProductInformation@name | Always | platform name, usually AutoCAD |
ProductInformation@build_version | Always | platform build, e.g. U.182.0.0(x64) |
ProductInformation@registry_version | Usually | e.g. 24.3 |
ProductInformation@install_id_string | Usually | e.g. ACAD-7100:409. Encodes release and locale |
ProductInformation@git_commit_id | Usually | build commit hash |
ProductInformation@registry_localeID | Always | e.g. 1033 |
ProductInformation@current_session_length | Always | seconds into the session at crash |
ProductInformation@session_start_count | Always | sessions started |
ProductInformation@session_clean_close_count | Always | clean closes. The ratio is your stability signal |
ProductInformation@uptime | Always | 100 ns ticks |
ProductInformation@otherCount, @otherUptime | Sometimes | other-product session counters |
ProductInformation@other | Rare | rarely populated |
ProductInformation@version_label | Rare | rarely populated |
GsConfig@certification, @version | Usually | render path certification, e.g. Dx12 |
GsConfig/Card@name, @driver | Usually | the render device the graphics system reports |
GsConfig/VirtualDevice/Current | Usually | active virtual device, e.g. “Dx12” |
GsConfig/Settings/* | Usually | HWFeatureLevel, SWFeatureLevel, HWAccelerationAvailable, HWAccelerationEnabled, HWAccelerationRecommended. Values carry literal quote characters |
GsConfig/Effects/Effect | Usually | each with @name @available @enabled @recommended. Names: ACAD_2DRetainMode, ACAD_2DRetainModeLevel, ACAD_AdvancedMaterial, ACAD_FastShaded, ACAD_FullShadows, ACAD_GlowHighlighting, ACAD_GPUHatch, ACAD_GPULineType, ACAD_LineFading, ACAD_LineSmoothing, ACAD_PerPixelLighting, ACAD_TextureCompression, ACAD_WhipArc |
GsConfig/GDI/* | Usually | GDIOBJECTS, USEROBJECTS, GDIOBJECTSPEAK, USEROBJECTSPEAK |
AppCDATA
A CDATA payload with a loose structure. Every part of it is optional.
Command: LASTCMD;previous;previous... <- first token is your last commandClr Data:-----CLR Version Info:CBS / Install / InstallPath / Release / Servicing / TargetVersion / Version-----Current Stack: <- usually empty-----Last Unhandled Exception: <- usually empty-----Last 3 'first chance' exceptions:-----Last-0 'first chance' exception:System.SomeException: message\r\r\n at Namespace.Method(...)-----Last-1 ...-----Last-2 ...GDI_Objects:1983 User_Objects:1258 Process_Handles:3099
| Value | Where |
|---|---|
| Last command | first token after Command:, up to the first semicolon |
| Command chain | the whole Command: line |
| CLR version block | -----CLR Version Info:, includes InstallPath and .NET version |
| First-chance exceptions | -----Last-0/1/2 blocks, type and message |
| Top frame | the at ... line after each exception |
| GDI objects, user objects, process handles | the tail line |
Three traps live in that block. The exception line and its at frame are separated by a doubled carriage return, so a regex written for a single one silently drops every top frame. First-chance exceptions are the last three seen in the session, not the crash chain, so they may be handled and unrelated. And a FileNotFound on an XmlSerializers assembly is .NET probing for an optional pre-generated DLL, not evidence of a broken install. I have made that call wrong in print before, so learn it from me instead of from your own bad ticket.
DxDiagInfo
All children are CDATA wrapped and always present.
| Group | Children |
|---|---|
SystemInformation | OperatingSystem, Language, SystemManufacturer, SystemModel, BIOS, Processor, SystemMemory, PageFile, FullDirectXVersion, DxDiagVersion |
GraphicsDeviceInfo | Manufacturer, ChipType, DACType, VendorID, DeviceID, SubSystemID, RevisionID, GraphicsHWMemory, DisplayMode, GraphicsDriverFile, DriverFileVersion, DriverDate, DriverSigned, DriverSignedValid, WHQLLevel, DxDiagWHQLLevel, DirectXVersion, DDIVersion, DDIVersionNumber |
GPU class comes from VendorID: 0x10DE NVIDIA, 0x1002 AMD, 0x8086 Intel (Arc only when ChipType says so), 0x1414 Microsoft Basic Render.
GraphicsInfo, GraphicsInfoRaw, GraphicsDriverInfo, VideoDriverInfo, OpenGLInfo
| Path | Presence | Notes |
|---|---|---|
GraphicsInfo@InfoType + text blob | Usually | usually D3D9Config. The blob repeats the fields below as key: value lines |
GraphicsInfoRaw@InfoType | Usually | same content as structured children |
GraphicsInfoRaw identity children | Usually | Driver, DriverVersion, Description, DeviceName, VendorId, DeviceId, SubSysId, Revision, WHQLLevel, DeviceType, AdapterOrdinal, MasterAdapterOrdinal, AdapterOrdinalInGroup, NumberOfAdaptersInGroup |
GraphicsInfoRaw capability children | Usually | the full D3D9 caps set: Caps, Caps2, Caps3, Presentation, Cursor, Dev, Dev2, PrimitiveMisc, Raster, ZCmp, SrcBlend, DestBlend, AlphaCmp, Shade, Texture, TextureFilter, CubeTextureFilter, VolumeTextureFilter, TextureAddress, VolumeTextureAddress, Line, MaxTextureWidth, MaxTextureHeight, MaxVolumeExtent, MaxTextureRepeat, MaxTextureAspectRatio, MaxAnisotropy, MaxVertexW, GuardBandLeft, GuardBandTop, GuardBandRight, GuardBandBottom, ExtentsAdjust, Stencil, FVF, TextureOp, MaxTextureBlendStages, MaxSimultaneousTextures, VertexProcessing, MaxActiveLights, MaxUserClipPlanes, MaxVertexBlendMatrices, MaxVertexBlendMatrixIndex, MaxPointSize, MaxPrimitiveCount, MaxVertexIndex, MaxStreams, MaxStreamStride, VertexShaderVersion, MaxVertexShaderConst, PixelShaderVersion, PixelShader1xMaxValue, DeclTypes, NumSimultaneousRTs, StretchRectFilter, VertexTextureFilter, MaxVShaderInstructionsExecuted, MaxPShaderInstructionsExecuted, MaxVertexShader30InstructionSlots, MaxPixelShader30InstructionSlots. Device capability data, no diagnostic value |
GraphicsDriverInfo@Driver | Usually | AutoCAD hdi driver. acaddm16.hdi is 2024, acaddm17.hdi is 2025 and 2026 |
VideoDriverInfo/ATIPackagingVersion | Always | AMD package version, or “No value found” |
OpenGLInfo@Renderer, @Vendor, @Version | Common | the active GL renderer |
Intel in OpenGLInfo while NVIDIA sits in GsConfig/Card is the muxless laptop signature. Treat it as an architecture indicator, not proof of causation.
RuntimeInformation and LicenseInfo
| Path | Presence | Notes |
|---|---|---|
RuntimeInformation@version, @DeobfuscationRequired, @XmlBasedBucketing | Rare | block metadata |
Exception@type, Exception/Message | Rare | managed exception type and message |
Exception/StackTrace/Method | Rare | one element per frame |
Exception/InnerException (nested) | Rare | each with its own Message and StackTrace |
LicenseInfo/FeatureName, FeatureVersion, LicenseBehavior, LicenseExpiration, LicenseUsage | Vestigial | legacy licensing block |
top-level GDI@Objects, @ObjectsPeak, @UserObjects, @UserObjectsPeak | Vestigial | use GsConfig/GDI instead |
The two companion files
CDXStackDump<guid>.xml appears alongside some crashes, sometimes more than one per folder. Each is a standalone RuntimeInformation document with the full managed exception: Exception@type, Message, StackTrace/Method per frame, and nested InnerException chains that can go several levels deep. This is where the detailed managed exception went when it stopped appearing inline. If the sidecar is there, parse it and ignore the rare inline block.
service_config.xml is the uploader’s own configuration: server/server_url, network/throttle_bytes_per_second, network/throttle_wait_timeout_seconds, network/disable_cert_verification, task/retry_count, task/retry_duration_seconds, task/abort_after_days. No crash content.
Parsing rules worth pinning to the wall
- Memory attributes are hex. Uptimes are 100 ns ticks. CrashDate is MM/DD/YYYY.
- Crash time comes from the file write time. The folder name is the collection date, which is not the same thing.
- DxDiag and GraphicsInfoRaw values are CDATA. GsConfig setting values carry literal quote characters.
- Open-files children are matched by element tag, because the tag is the filename.
- For the managed exception, go AppCDATA first, then CDXStackDump, then the rare inline RuntimeInformation.
- In a folder holding both XML and .pb files, treat the XML as authoritative for identity and let the .pb add the faulting module.
What this format has that v7 does not
The multi-file open-files list. The CrashHistory upload counters. The OpenGL renderer. First-class username, email and phone fields. And the upi_error signal that tells you inventory collection failed rather than leaving you to guess.
What it lacks, and v7 has: the faulting native module by name, access violation direction and null-pointer flag, a per-machine crash counter, and the user’s own typed description of what they were doing. That side is on the v7 .pb reference page.
Reference pages get updated rather than replaced. If a field moves or Autodesk changes the client, this page changes with it.
Cheers, Shaan