Please enable JavaScript to view this site.

 

Navigation: Appendices > Q++Studio > Debugging > Logs > Diagnostic Logs

DTP Generation Log - qpplog.txt

Scroll Prev Up Next More

qpplog.txt records the DTP plugin’s activity during the dtp part of diary generation.

 

Besides reporting error conditions, qpplog.txt helps locate the stage at which something went missing from the output. If the corresponding instruction appears for the affected page and object, Q++Studio supplied it to the DTP plugin; inspect the subsequent log entries and output to determine what happened when it was processed. If the instruction is absent from a complete log of the matching run, investigate why Q++Studio did not generate it. First confirm that the log covers the relevant operation; an interrupted or incomplete log cannot establish that the instruction was never generated. For a missing holiday or school-vacation result, start by checking qpp_TempHolidays.txt for the required date and selected set. The examples here are from the InDesign plugin; QuarkXPress logs and other plugin versions can differ.

 

For enabling and viewing this log, see DTP Generation Logs. It is a DTP execution trace, not the Q++Studio application event log and not a complete dump of script settings.

 

Read the Header and the End First

 

The header identifies the DTP application release, plugin build, SDK, and toolset. Record these exactly when comparing runs. A plugin compilation date is not the date on which the diary was generated.

 

Log file opened
Q++Studio plugin for InDesign
InDesign.exe release version 20.5.5.119
Plugin SDK version 20.0.1.32 (kBuildNumberStr 32)
InDesign 2025 plugin version 20 build 87, compiled Friday, September 25, 2026 at 15:18
Ipp20.sdk.pln compiled using the platform toolset v143 (Visual C++ 2022)

 

At the end, look for the save/close sequence, command completion, BusyFile deletion, and “Log file closed”. Their presence helps establish how far the run progressed. A successful command script does not guarantee that the output contains the intended dates, text, or appearance.

 

Main Stages

 

Stage / search text

What to inspect

CreateOutputDoc / seed template

Which template was used as the seed and which temporary output file was created.

CreateOutputPages / page copying

Template IDs, source pages, inserted output pages, layers, and blank-page handling.

slug lookup table

The association used by the plugin to locate output objects.

About to process p-code / pcl.

Token replacements and formatting instructions directed at pages and objects.

DoSaraAfterGeneration / BOXFIT

The SARA passes, page restrictions, actual matches, and box-fitting stage where applicable.

missing fonts / text overflow

Reported resources and final checks. A completed check is not automatically a clean result.

PROFILING

Elapsed time for named stages, useful for locating a slow phase in that run.

Winding down / background task(s)

InDesign background work and the shutdown sequence.

 

Reading p-Code Entries

 

pcl. 000422  p. 2  obj. 21
{**RICH45**Lundi de Pentecôte**TEXT45**}={OVRPRT+,COLOR(PANTONE 200 C)|Lundi de Pentecôte}

 

This is a line-wrapped excerpt of one logged instruction. pcl. identifies a p-code entry, p. identifies the page in that operation, and obj. identifies the target object. The RICH/TEXT strings are internal rich-text markers; preserve them when matching the instruction to nearby entries. They are not an additional holiday name.

 

The replacement shown retains the holiday text while applying formatting. The later SARA changes that text to its abbreviated form. An intermediate replacement therefore need not equal the final text seen in the output.

 

A physical line number in qpplog.txt is different from the pcl. value. Indented lines after a p-code entry can describe several attributes of that same instruction. Consult Viewing p-Code and the native-formatting references linked from the SARA instruction topic.

 

Example: A SARA Hit Followed by a Normal Skip

 

The simple run first loads the command in the before-BOXFIT pass. Later in that pass it records an actual replacement in object 21 on page 2. The omission marker below stands for intervening log entries.

 

About to enter DoSaraAfterGeneration() before BOXFIT
About to load Sara record 1 into memory
    command: {|Lundi de Pentecôte}={|L. de Pentecôte}
    pages: 2,3
[intervening entries omitted]
    Saras processing of textbox object 21 on page 2
            Checking Sara attributes match found for {|Lundi de Pentecôte}={|L. de Pentecôte}
            Sara match found for {|Lundi de Pentecôte}={|L. de Pentecôte}, replaced 'Lundi de Pentecôte' with 'L. de Pentecôte'

 

Loading the command establishes that it was prepared for the pass. The “Sara match found” entry additionally records what was replaced and identifies the textbox context. The after-BOXFIT pass then reads:

 

About to enter DoSaraAfterGeneration() after BOXFIT
About to load Sara record 1 into memory
    command: {|Lundi de Pentecôte}={|L. de Pentecôte}
    pages: 2,3
    Skipping Sara record 1 due to isAfterBoxfitSara != isAfterBoxfit mismatch
Finished loading all Saras into memory
About to enter IterateOverAllRelevantBoxes()
No Saras specified

 

Here “No Saras specified” follows an explicit phase-mismatch skip. It describes this after-BOXFIT pass and does not cancel or contradict the earlier replacement.

 

Units and Internal Identifiers

 

Read sizes in the units specified for the native keyword. The diagnostic trace can additionally print fixedValue, floatValue, SdkValue, or an internal attribute index. These are different representations, not necessarily different requested settings.

 

        inFuncSizeMM attribute PRABOVELEFTINDENT, index 6992, fixedValue 2065780, floatValue 31.521308

 

For example, the supplied log has PRABOVELEFTINDENT 11.12, followed by floatValue 31.521308: 11.12 mm is approximately 31.5213 points. Do not report this as an incorrect 31.5 mm indent. Likewise, a color/resource ID or an SDK attribute index is not a holidays-set ID.

 

Distinguish Problems from Normal Skips

 

A message that an option is false and its operation was skipped describes a decision, not necessarily a failure. In the example, PDF export is skipped because ExportToPDF=false, and box fitting is skipped because curRunContainsBoxfits=false.

 

Skipping ModifyOutputPages(InBoxResizeMode) due to curRunContainsBoxfits=false
[intervening entries omitted]
Skipping PDFExport::GeneratePDFfromINDDDoc() due to IniSettings.ExportToPDF=false

 

A SARA can be skipped in one pass because it belongs to the other. Read the surrounding before-BOXFIT or after-BOXFIT section before concluding that no SARAs ran.

 

Conversely, successful completion can coexist with a resource issue. The example reports two missing fonts, Eurostile Demi and Eurostile Regular, and still completes its command script. Investigate the reported fonts when the symptom concerns font substitution, text metrics, wrapping, or overflow.

 

Number of missing fonts 2 :
Font Name: Eurostile Demi  Font Face: Demi Status: STATUS_MISSING
Font Name: Eurostile Regular  Font Face: Regular Status: STATUS_MISSING

 

Example: An Unavailable SARA Find Font

 

About to load Sara record 18 into memory
    command: {rx,f Laenderkennzeichen2026 Regular|( )}={s 4|$0}
    pages: 25
        Laenderkennzeichen2026 Regular FONT NOT AVAILABLE
        inFuncSizePT attribute s, index 6915, fixedValue 262144, floatValue 4.000000

 

The complex run supplies a more specific SARA example: while loading commands 18 and 22, the plugin reports Laenderkennzeichen2026 Regular as FONT NOT AVAILABLE; command 23 reports AstrologyP01 as unavailable. Those commands use find-font criteria and have no recorded hits in LogGen1.CSV. Preserve this connection when investigating their behavior. A final missing-font summary and a font-lookup message during command loading describe related but distinct stages.

 

An Apparent Hang or Interrupted Run

 

Locate the last completed stage and the following incomplete operation. Repeated IdleCallback or Winding down messages are not proof of a deadlock: the example’s UpdateRecentFiles tasks reach zero and normal shutdown follows. A task labelled “finishing” or “progress unavailable” is not, by itself, an error.

 

Winding down: 7 background task(s)
  Task 1: name="UpdateRecentFiles:", state=finishing (2), progress unavailable
[intervening entries omitted]
Winding down: 0 background task(s)
[intervening entries omitted]
Deleting BusyFile ...
Before deleting BusyFile: 0 background task(s)
... BusyFile deleted
Command script successful; about to close InDesign properly by calling IppIDUtilities::IppQuitIndesign()
leaving IdleCallback
Deleting Log Marker File ...
... Log Marker File deleted
Log file closed

 

This selected sequence reaches zero background tasks, deletes the BusyFile, reports command-script success and closes the log. It supports normal completion of this run, despite its missing-font reports. The omission markers are editorial; they are not messages written by the plugin.

 

If the log ends abruptly, the last visible line is a starting point for investigation rather than conclusive proof of the failing instruction. The DTP logs documentation distinguishes controlled and uncontrolled crashes and explains the Flush Log option. Buffered output can also leave the visible tail incomplete.

 

Guidance for an AI Assistant

 

Report the versions, last meaningful stage, relevant page/object/p-code identifiers, and exact failure or resource messages. Separate logged execution from conclusions about visual correctness. Request the matching script, p-code, template scan, or output only where the available evidence leaves a specific gap.

 

For missing holidays, start with the holiday data export. For SARA behavior, compare the prepared instruction list and the combined messages/hits export. For missing template text or resources, inspect qppscanlog.txt.

 


Topic 189900, last updated on 22-Oct-2026