Overview
Siemens WinCC generates user-mode memory dump files (extension .dmp) inside the runtime diagnose directory whenever a process such as SCRIPT.EXE, CCProjectMgr.exe, PDLrt.exe, or HMIRT.exe terminates abnormally. The files are stored under C:\Program Files\Siemens\WinCC\diagnose\Dumps\ (path varies slightly on multi-installation or WinCC V7.x migration setups where the directory can also be located under C:\Program Files (x86)\Siemens\). When SCRIPT.EXE produces a STATUS = TIMEOUT event in the WinCC logging, a matching SCRIPT_<YYYYMMDD>_<HHMMSS>.dump file is created with the same timestamp.
These dump files are valuable for root-cause analysis because they preserve the contents of process memory at the moment of the fault — including the call stack, register state, loaded modules, and exception information. Unlike Windows small memory dump files generated by %SystemRoot%\Minidump, WinCC dump files are full user-mode dumps produced by the runtime through the Windows MiniDumpWriteDump API and they reference private symbol information (PDB files) that ships only with WinCC development toolchains.
The primary obstacle in field troubleshooting is that public Microsoft symbol servers (http://msdl.microsoft.com/download/symbols) do not host symbols for WinCC binaries. This article documents the workflow engineers can use to extract maximum diagnostic value without internal Siemens symbol access, plus the alternative triage techniques that are available out of the box.
Problem Details
The classic failure mode is:
- A WinCC runtime project is active on the HMI/SCADA station.
- An automation event — typically a VBScript or ANSI-C action running inside
SCRIPT.EXE— exceeds its internal execution budget. - WinCC logs:
255,DD.MM.YYYY,HH:MM:SS:mmm,0,4,SYSTEM,<HOSTNAME>,CCProjectMgr,WinCC Project Manager : Deactivate Project - SCRIPT.EXE - Status = TIMEOUT. - A new file appears in the diagnose folder:
SCRIPT_YYYYMMDD_HHMMSS.dump(or sometimesSCRIPT_YYYYMMDD_HHMMSS.dmp) whose LastWriteTime matches the timeout event. - Engineers attempt to read the dump with the Microsoft Debugger Tools
dumpchk.exeand receive:*** ERROR: Symbol file could not be found. Defaulted to export symbols.
Without private PDB symbols, only the export table of each loaded DLL is visible. Call stacks therefore resolve only down to the exported function entry point, hiding the precise source line and the failing VBScript context.
Root Cause
WinCC binaries are linked with Microsoft Visual C++ and ship without public symbols. SCRIPT.EXE is the WinCC VBScript/ANSI-C action interpreter wrapper, and it depends on CCAlgRt.dll, CCScriptHost.dll, and the VBScript engine vbscript.dll. When a script loops indefinitely, performs blocking COM calls, or triggers an unhandled exception, the WinCC runtime watchdog terminates the process and emits a full minidump through MiniDumpWriteDump.
Symbol resolution fails because:
- The Microsoft public symbol server at
http://msdl.microsoft.com/download/symbolsonly carries Microsoft-published PDBs (ntdll.pdb,kernel32.pdb,vbscript.pdb, etc.). - WinCC private PDBs (
CCAlgRt.pdb,CCScriptHost.pdb,SCRIPT.pdb) are not redistributed; they are only present on Siemens internal development and support workstations. - Even with
_NT_SYMBOL_PATHconfigured asSRV*c:\symbols*http://msdl.microsoft.com/download/symbols, dump analysis falls back to export tables — useful, but not precise.
This means engineers are limited to module-level triage using export symbols plus side-by-side comparison against ccalgmsg.dll, ccdebug.dll, and WinCC log files in \diagnose\<HOSTNAME>_<YYYYMMDD>_<HHMMSS>.LOG.
Symbol Path Setup for Dumpchk
Before using dumpchk.exe, configure a local symbol cache to avoid repeated server round-trips:
set _NT_SYMBOL_PATH=SRV*C:\symbols*http://msdl.microsoft.com/download/symbols
mkdir C:\symbols
set _NT_EXECUTABLE_IMAGE_PATH=C:\Windows\System32;C:\Windows\SysWOW64;C:\Program Files\Siemens\WinCC\bin
Reference the Microsoft Learn guidance for reading small memory dump files for symbol path mechanics. The Dell knowledge base also provides a step-by-step procedure for analyzing Windows minidumps with WinDbg which is directly applicable to the WinCC dump file format.
Step-by-Step Dump Analysis Procedure
-
Verify the dump was created by the same process that timed out. Match the
LastWriteTimeofSCRIPT_*.dumpwith theSTATUS = TIMEOUTline in\diagnose\<HOST>_*.LOG. Tools:Get-ChildItem C:\Program Files\Siemens\WinCC\diagnose\Dumps\ | Sort-Object LastWriteTime -Descending. -
Capture file size and header. WinCC full minidumps are typically 5–250 MB depending on WinCC version and project state.
dir *.dumpor PowerShellGet-Itemgives the precise value. -
Run Dumpchk for a structural health check.
dumpchk -y SRV*C:\symbols*http://msdl.microsoft.com/download/symbols -i C:\Windows\System32 -z "C:\Program Files\Siemens\WinCC\diagnose\Dumps\SCRIPT_20110525_173209.dmp"
Expected output sections:BugCheck 0(user-mode),ExceptionCode,ModuleList,ThreadCount. If Dumpchk reports*** ERROR: Symbol file could not be found. Defaulted to export symbols, the file itself is still valid — only symbol resolution is partial. -
Load the dump in WinDbg. Launch WinDbg as Administrator,
File → Open Crash Dump, then run:.sympath SRV*C:\symbols*http://msdl.microsoft.com/download/symbols.reload!analyze -v -
Inspect threads.
~*kenumerates call stacks for every thread. Look for threads stuck insidevbscript!VBScriptClass::Call,CCAlgRt!AlgRtExecute, orCCScriptHost!ScriptHost::Run. Even without private symbols, the export names identify the failing subsystem. -
Inspect loaded modules.
lmlists modules with versions. Cross-checkCCAlgRt.dll,CCScriptHost.dll, andSCRIPT.EXEversions against the installed WinCC build (e.g. WinCC V7.4 SP1 Update 12 →CCAlgRt.dll7.4.1.12). Mismatches indicate partial upgrades. -
Read WinCC logs in parallel.
\diagnose\<HOST>_<DATE>.LOG,\diagnose\SCRIPT.LOG, and\Archives\<Project>\<TagArchive>should all be correlated. Look forCCAlgRterror codes (1001, 1002, 1100) preceding the timeout. -
Save the analysis.
.logopen C:\dumps\analysis_<DATE>.txt, run!analyze -v, then.logclose. This produces the artifact to attach to a Siemens support request (Siemens SR).
Alternative Diagnosis Without Symbols
Because private symbols are typically unavailable, build the case from secondary evidence:
| Source | Path | What to look for |
|---|---|---|
| WinCC Alarm Logging | \diagnose\<HOST>_<DATE>.LOG |
Event ID 255, SCRIPT.EXE - Status = TIMEOUT, preceding APC events |
| Windows Application Event Log |
eventvwr.msc → Application |
Source Application Error, SCRIPT.EXE, faulting module vbscript.dll or CCAlgRt.dll
|
| WinCC Project Script Editor | Graphics Designer → C scripts / VBS actions | Infinite loops, blocking HMIRuntime calls, missing HMIRuntime.Trace output |
| SQL Archive | SQL Server (WINCC)>CC_<Project>_<YYYYMMDD> |
Tag values frozen at moment of crash — identifies which PLC connection dropped |
| Windows Performance Recorder | \diagnose\<HOST>_<DATE>.perf |
ETW trace of SCRIPT.EXE CPU spikes > 90% sustained for > 30 s |
When symbols cannot be obtained, the !analyze -v output will still surface the faulting exception code (typically 0xC0000005 ACCESS_VIOLATION or 0xC0000409 STATUS_STACK_BUFFER_OVERRUN for VBScript errors). The faulting module is reported even without PDBs because module names are embedded directly in the PE header.
SCRIPT.EXE Timeout: Engineering Triggers
The SCRIPT.EXE - Status = TIMEOUT event ID 255 is fired when a VBScript or ANSI-C action exceeds the WinCC runtime watchdog. Common causes:
| Cause | Diagnostic indicator | Mitigation |
|---|---|---|
| Infinite loop in user VBS | CPU on SCRIPT.EXE pinned at 100% in Task Manager |
Add loop counters; break on sentinel tags |
| Blocking HMIRuntime call | Single-threaded SCRIPT.EXE stops dispatching timers |
Move blocking I/O to Global Script asynchronous actions |
| Tag polling storm | Log shows thousands of HMIRuntime.Tags(.Read) per second |
Use tag trigger with hysteresis; cache reads |
| COM deadlock | Stack contains ole32!CoMarshalInterface + CCAlgRt!AlgRtBlock
|
Avoid nested COM calls; marshal with CreateObject in separate process |
| Project unload race | Project deactivated within 30 s of script start | Wrap long-running work in HMIRuntime.Trace checkpoints |
Verification
Confirm the diagnosis landed and the system is healthy by checking all four artifacts together:
-
Dump is healthy:
dumpchk -z <file>printsFinished dump checkwith no errors beyond symbol misses. -
Event ID 255 stops recurring. In WinCC Alarm Logging, filter
EventID = 255over the next 24 hours. -
No orphaned
SCRIPT.EXEprocesses. Task Manager showsSCRIPT.EXEonly once per project (one instance is normal). -
Symbol resolution improved. Re-run
!analyze -vafter applying the WinCC fix; confirm the failing module now resolves to a specific function export rather than a wildcard.
Preventive Measures
- Configure WinCC to retain at least the last 10 dumps:
WinCC Explorer → Computer → Properties → Runtime → Dump file retention. - Schedule a daily copy of
\diagnose\Dumps\to a network share with PowerShell:robocopy "C:\Program Files\Siemens\WinCC\diagnose\Dumps" "\\<FILESERVER>\WinCCDumps$\%COMPUTERNAME%" *.dump *.dmp /MAXAGE:7 /MOV /LOG+:C:\Logs\dump_copy.log - For symbol access on enterprise-supported sites, request a private symbol license through Siemens SR portal referencing the SR number; Siemens Premier Support may release build-specific PDBs.
- Use Process Monitor (
procmon.exe) for repro captures when the fault is reproducible — often more decisive than post-mortem dumps. - Set Windows Error Reporting to Do not send on HMI stations to prevent accidental upload of WinCC dumps to WER servers.
Troubleshooting Matrix
| Symptom | Probable cause | First action | Second action |
|---|---|---|---|
| Symbol file not found | Private WinCC PDB missing | Set _NT_SYMBOL_PATH to public MS server |
Submit SR for build-specific PDBs |
| Dumpchk reports invalid signature | File truncated during copy | Re-copy with Robocopy /Z
|
Verify SHA-256 against source |
| SCRIPT.EXE times out every 5 min | Triggered action loop | Add HMIRuntime.Trace at action entry |
Profile in WinCC Script Diagnostics |
| Multiple SCRIPT dumps per day | Memory leak in user VBS | Inspect !heap -l in WinDbg |
Refactor VBS to release COM objects |
| WinCC project auto-deactivates | SCRIPT timeout watchdog escalation | Review CCProjectMgr events in \diagnose\<HOST>_*.LOG
|
Increase watchdog via CCAlgRt.ini if vendor-approved |
| Dump size > 500 MB | Full process dump on V7.5+ | Compress with compact /c
|
Configure MiniDumpType = MiniDumpWithIndirectMemory |
Key WinCC Diagnosis Paths
| Artifact | Default location | Retention |
|---|---|---|
| Process dump files | \Program Files\Siemens\WinCC\diagnose\Dumps\ |
10 generations (configurable) |
| WinCC project logs | \diagnose\<HOST>_<YYYYMMDD>_<HHMMSS>.LOG |
30 days default |
| Script runtime log | \diagnose\SCRIPT.LOG |
Rolling |
| Windows minidumps | %SystemRoot%\Minidump\ |
OS-controlled, see Microsoft Q&A on MEMORY.DMP |
| Full crash memory | %SystemRoot%\MEMORY.DMP |
OS-controlled |
%SystemRoot%\MEMORY.DMP or the WinCC \diagnose\Dumps\ contents until Siemens Support has confirmed they no longer need them for an open service request. Disk-cleanup automation should exclude *.dmp and *.dump.FAQ
Why does Dumpchk say "Symbol file could not be found" for WinCC dumps?
The Microsoft public symbol server at http://msdl.microsoft.com/download/symbols only hosts Microsoft-shipped PDBs. WinCC private PDBs (CCAlgRt.pdb, CCScriptHost.pdb) are restricted to Siemens development and need to be requested through a Siemens support ticket.
What does the WinCC event "SCRIPT.EXE - Status = TIMEOUT" mean?
It is event ID 255, fired when a VBScript or ANSI-C action exceeds the WinCC runtime watchdog. A matching SCRIPT_*.dump is written to \Program Files\Siemens\WinCC\diagnose\Dumps\ and the CCProjectMgr may deactivate the project.
How do I read a WinCC .dump file without private symbols?
Use WinDbg with .sympath SRV*C:\symbols*http://msdl.microsoft.com/download/symbols and .reload. Public symbols resolve Microsoft modules; WinCC modules fall back to export symbols. Combine the call stack with the WinCC log in \diagnose\<HOST>_*.LOG for root cause.
Can I safely delete MEMORY.DMP or the WinCC diagnose folder dumps?
Only after Siemens Support has confirmed they are no longer required for an open service request. See Microsoft Q&A on MEMORY.DMP. Schedule a copy job rather than a delete job.
What is the difference between a WinCC .dmp and a Windows minidump?
A WinCC .dmp/.dump is a full user-mode process dump produced via MiniDumpWriteDump for a single WinCC process (e.g. SCRIPT.EXE). Windows small memory dumps in %SystemRoot%\Minidump cover kernel-mode and are much smaller. Both can be analyzed with WinDbg following the Dell WinDbg procedure.