Focused reference · Unreal Engine 5.8

Debugging and recovery

unreal-editor-automation/references/debugging-recovery.md

Symptom routing

SymptomCheck first
Blueprint editor node missingEditor-only parent/module, plugin enabled, restart required
Scripted Action absentCorrect utility base, Call in Editor, Supported Classes, compiled/saved
Python class/function absentUE 5.8 API, plugin/module enabled, reflected exposure, editor restart
Python commandlet sees no actorsNo level auto-loaded; load intended level explicitly
Property changed but UI/derived state staleUsed direct assignment instead of set_editor_property/setter
Undo does nothingOperation is not undoable or object was not transaction-aware
Asset exists but did not savePackage not dirty, wrong package selected, save failed/read-only
Automation passes locally onlySelection/UI dependence, race, machine path, missing plugin/report
MCP cannot connectServer status, loopback endpoint/port, client launched from config root
MCP new tool missingToolset enabled/schema discovery, Live Coding limitation, restart
Editor freezes during batchWork on game thread, no progress/cancel, scope too broad

Partial failure recovery

Stop on the first failure when continuing could compound damage. Preserve:

  • ordered operation log;
  • objects changed before failure;
  • packages saved versus only dirty;
  • source-control state;
  • validation/test output;
  • whether transaction undo is available.

If all changes are undoable and unsaved, perform and verify undo. Otherwise use source control or the prepared backup to restore named packages. Do not improvise filesystem replacement while the editor has packages loaded.

After recovery, restart/reload as needed, requery objects from the editor rather than trusting stale Python references, run validation, and inspect the diff before retrying.

Tool hardening checklist

  • Rerun on already-processed content.
  • Cancel halfway through.
  • Inject a read-only asset and one invalid input.
  • Test zero, one, and many candidates.
  • Test name/path collisions.
  • Test unrelated dirty packages.
  • Test headless mode without selection or an open level.
  • Test packaged/cook impact when runtime content changes.