NationalSecurityAgency/ghidra · error · IOException
At file '{pdbName}': Abnormal termination of 'pdb.exe' proce
Error message
At file '{pdbName}':
Abnormal termination of 'pdb.exe' process. What it means
Thrown by CreatePdbXmlFilesScript.runPdbExe when pdb.exe exits with a non-zero code (after stderr was empty). The partially-created .pdb.xml is deleted and an IOException reporting abnormal termination is raised. This is distinct from the stderr case: it means the helper crashed or was killed without writing to stderr.
Source
Thrown at Ghidra/Features/Base/ghidra_scripts/CreatePdbXmlFilesScript.java:158
reader.close();
int exitValue = currentProcess.waitFor();
String errorMessage = strBuilder.toString();
if (errorMessage.length() > 0) {
if (createdFile.isFile()) {
createdFile.delete();
}
throw new IOException("At file '" + pdbName + "':\n" + errorMessage);
}
if (exitValue != 0) {
if (createdFile.isFile()) {
createdFile.delete();
}
throw new IOException(
"At file '" + pdbName + "':\nAbnormal termination of 'pdb.exe' process.");
}
}
private void getPDBFiles(File parentDir, List<File> foundFiles) {
for (File childFile : parentDir.listFiles()) {
if (childFile.isDirectory()) {
getPDBFiles(childFile, foundFiles);
}
else {
if (childFile.getName().endsWith(".pdb")) {
foundFiles.add(childFile);
}
}
}
}
}View on GitHub (pinned to d5f144c24d)
Solutions
- Run pdb.exe directly on the file and check its exit code and any Windows event-log entries.
- Ensure pdb.exe matches the Ghidra build and OS architecture; reinstall Ghidra if the binary is corrupted.
- Free disk space and confirm write permissions on the output directory.
- Exclude pdb.exe from AV/DEP interception, or run from a trusted directory.
Example fix
// before runPdbExe(pdbExeLocation, pdbParentDir, pdbName, currentFilePath); // after - run pdb.exe manually to see the exit code // pdb.exe <file>.pdb ; echo Exit: %ERRORLEVEL% // then reinstall/replace pdb.exe if it crashes
Defensive patterns
Strategy: retry
Validate before calling
// Run pdb.exe once out-of-band to confirm exit code 0
Process p = new ProcessBuilder(pdbExeLocation, path).start();
p.waitFor();
if (p.exitValue() != 0) {
// do not feed this file to the script
} Try / catch
try {
runPdbExe(...);
} catch (IOException e) {
if (e.getMessage().contains("Abnormal termination")) {
// retry once; if it persists, reinstall pdb.exe / check AV
runPdbExe(...);
} else throw e;
} Prevention
- Ensure pdb.exe matches the Ghidra build and is not corrupted.
- Free disk space and confirm write permission on the output dir.
- Exclude pdb.exe from AV/DEP interception.
When it happens
Trigger: Calling runPdbExe where pdb.exe terminates with exitValue != 0 and no stderr. Caused by pdb.exe crashing, being killed by a signal, hitting an unhandled internal error, or running out of memory/disk.
Common situations: pdb.exe crashes on a malformed PDB without printing diagnostics. Antivirus or Data Execution Prevention kills pdb.exe. Insufficient disk space for the .pdb.xml output. Architecture mismatch (32-bit pdb.exe on a PDB it can't handle).
Related errors
- At file '{pdbName}': {errorMessage}
- %s: %s
- gdis execution error
- GNU disassembler process died unexpectedly.
AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14).
Data as JSON: /api/errors/f716b171431bd873.
Report an issue: GitHub.