public String validate() throws Exception {

		if (currentProgram == null) {
			return ("There is no open program");
		}

		if (!GhidraProgramUtilities.isAnalyzed(currentProgram)) {
			return ("The program has not been analyzed. Please run auto-analysis and make sure " +
				"the RTTI analyzer is one of the analyzers enabled.");
		}

		if (isRttiAnalyzed() && !hasRtti()) {
			return ("This program does not contain RTTI.");
		}

		CategoryPath path =
			new CategoryPath(CategoryPath.ROOT, RecoveredClassHelper.DTM_CLASS_DATA_FOLDER_NAME);
		if (currentProgram.getDataTypeManager().containsCategory(path)) {
			return ("This script has already been run on this program");
		}

		if (!checkGhidraVersion()) {
			return ("This script only works with Ghidra version 9.2, 9.2.2 and later. It does" +
				" not work on Ghidra 9.2.1 or on versions prior to 9.2");
		}

		if (!isGcc() && !isWindows()) {
			return ("This script only handles Windows PE and Gcc programs");
		}

		defaultPointerSize = currentProgram.getDefaultPointerSize();
		if (defaultPointerSize != 4 && defaultPointerSize != 8) {
			return ("This script only works on 32 or 64 bit programs");
		}

		// check that gcc loader or mingw analyzer has fixed the relocations correctly
		if (isGcc()) {

			runScript("FixElfExternalOffsetDataRelocationScript.java");

			// first check that there is even rtti by searching the special string in memory
			if (!isStringInProgramMemory("class_type_info") && !containsClassTypeinfoSymbol()) {
				return ("This program does not appear to contain RTTI.");
			}

			// then check to see if the special typeinfo namespace is in external space
			// if so then relocations are present and have not been fixed up because when fixed up
			// the namespace gets moved to inside program space
			if (isExternalNamespace("__cxxabiv1::__class_type_info")) {
				return ("This program's relocations were not correctly fixed so the script cannot " +
					"continue. If this program is mingw this is a known issue and " +
					"will be fixed in a later release. For all other gcc programs please " +
					"contact the Ghidra team so this issue can be fixed.");
			}

			if (hasRelocationIssue()) {
				return ("This program has unhandled elf relocations so cannot continue. Please " +
					"contact the Ghidra team for assistance.");
			}
		}

		return new String();

	}
Method to determine if pdb info has been applied to the program
@return true if pdb info has been applied to program
Ghidra/Features/Decompiler/ghidra_scripts/RecoverClassesFromRTTIScript.java