public static File findPdb(Program program, Set<FindOption> findOptions, TaskMonitor monitor) {

		try {
			SymbolFileInfo symbolFileInfo = SymbolFileInfo.fromProgramInfo(program);
			if (symbolFileInfo == null) {
				return null;
			}
			// make a copy and add in the ONLY_FIRST_RESULT option
			findOptions = findOptions.isEmpty() ? EnumSet.noneOf(FindOption.class)
					: EnumSet.copyOf(findOptions);
			findOptions.add(FindOption.ONLY_FIRST_RESULT);

			SymbolServerInstanceCreatorContext temporarySymbolServerInstanceCreatorContext =
				SymbolServerInstanceCreatorRegistry.getInstance().getContext(program);

			SymbolServerService temporarySymbolServerService =
				getSymbolServerService(temporarySymbolServerInstanceCreatorContext);

			List<SymbolFileLocation> results =
				temporarySymbolServerService.find(symbolFileInfo, findOptions, monitor);
			if (!results.isEmpty()) {
				return temporarySymbolServerService.getSymbolFile(results.get(0), monitor);
			}
		}
		catch (CancelledException e) {
			// ignore
		}
		catch (IOException e) {
			Msg.error(PdbPlugin.class, "Error getting symbol file", e);
		}
		return null;
	}
Searches the currently configured symbol server paths for a Pdb symbol file.

@param program the program associated with the requested pdb file
@param findOptions options that control how to search for the symbol file
@param monitor a {@link TaskMonitor} that allows the user to cancel
@return a File that points to the found Pdb symbol file, or null if no file was found
Ghidra/Features/PDB/src/main/java/pdb/PdbPlugin.java