public void parse() throws IOException, PdbException {

		checkPdbLoaded();
		checkFileType();
		checkOSCompatibility();

		if (!forceAnalysis && !programAttributes.isProgramAnalyzed()) {
			throw new PdbException("Before loading a PDB, you must first analyze the program.");
		}

		processPdbContents(false);

		// The below code only applies when we are processing .pdb (not .pdb.xml) files
		if (!isXML) {

			try {//give thread sometime to spin up...
				Thread.sleep(1000);
			}
			catch (Exception e) {
				// don't care
			}

			if (hasErrors()) {
				throw new PdbException(getErrorAndWarningMessages());
			}

			if (hasWarnings()) {
				if (SystemUtilities.isInHeadlessMode()) {
					throw new PdbException(
						getErrorAndWarningMessages() + "..  Skipping PDB processing.");
				}
				int option = OptionDialog.showYesNoDialog(null, "Continue Loading PDB?",
					getErrorAndWarningMessages() + "\n " + "\nContinue anyway?" + "\n " +
						"\nPlease note: Invalid disassembly may be produced!");
				if (option == OptionDialog.OPTION_ONE) {
					cleanup();
					processPdbContents(true);//attempt without validation...
				}
				else {
					throw new PdbException(getErrorAndWarningMessages());
				}
			}
		}
		else { // only for .pdb.xml files.
			verifyPdbSignature();
		}
		parsed = true;
	}
Parse the PDB file, enforcing pre-conditions and post-conditions.

@throws IOException If an I/O error occurs
@throws PdbException  if there was a problem during processing
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java