private void processMethods(List<String> commandStrings, AbstractPdb pdb,
			List<MsTypeField> methods) {
		for (MsTypeField methodType : methods) {
			if (methodType instanceof AbstractOneMethodMsType oneMethodType) {
				String name = oneMethodType.getName();
				ClassFieldMsAttributes attributes = oneMethodType.getAttributes();
				RecordNumber procedureTypeRn = oneMethodType.getProcedureTypeRecordNumber();
				AbstractMsType t = pdb.getTypeRecord(procedureTypeRn);
				if (!(t instanceof AbstractMemberFunctionMsType memberFunc)) {
					Msg.warn(this, "Unexpected type found: " + t.getClass().getSimpleName());
					continue;
				}
				int adjuster = memberFunc.getThisAdjuster();
				Long offset = oneMethodType.getOffsetInVFTableIfIntroVirtual();
				ClassFieldAttributes atts =
					ClassFieldAttributes.convert(attributes, Access.BLANK);
				if (atts.getProperty() == Property.VIRTUAL) {
					commandStrings.add(
						getMethodString(pdb, adjuster, offset.intValue(), name, memberFunc));
				}
			}
			else if (methodType instanceof AbstractOverloadedMethodMsType overloadedMethodType) {
				String name = overloadedMethodType.getName();
				RecordNumber methodsListRn =
					overloadedMethodType.getTypeMethodListRecordNumber();
				AbstractMsType methodsListTry = pdb.getTypeRecord(methodsListRn);
				if (methodsListTry instanceof AbstractMethodListMsType methodsListType) {
					List<AbstractMethodRecordMs> recordList = methodsListType.getList();
					for (AbstractMethodRecordMs methodRecord : recordList) {
						Long offset = methodRecord.getOptionalOffset();
						RecordNumber procedureTypeRn = methodRecord.getProcedureTypeRecordNumber();
						ClassFieldMsAttributes attributes = methodRecord.getAttributes();
						AbstractMsType t = pdb.getTypeRecord(procedureTypeRn);
						if (!(t instanceof AbstractMemberFunctionMsType memberFunc)) {
							Msg.warn(this,
								"Unexpected type found: " + t.getClass().getSimpleName());
							continue;
						}
						int adjuster = memberFunc.getThisAdjuster();
						ClassFieldAttributes atts =
							ClassFieldAttributes.convert(attributes, Access.BLANK);
						if (atts.getProperty() == Property.VIRTUAL) {
							commandStrings.add(getMethodString(pdb, adjuster, offset.intValue(),
								name, memberFunc));
						}
					}
				}
				else {
					Msg.warn(this, "Unexexpected method list type: " +
						methodsListTry.getClass().getSimpleName());
				}
			}
			else {
				Msg.warn(this,
					"Unexexpected method type: " + methodType.getClass().getSimpleName());
			}
		}
	}
Developer script to capture items from Program and PDB for developing tests
Ghidra/Features/PDB/developer_scripts/CaptureHelperScript.java