🇬🇧 English | 🇺🇦 Українська
12. Debug Console¶
A chapter about S3CompatibleStorageDebug — a separate, optional module with console commands
for testers and programmers: upload a file, inspect a bucket's contents or recent requests,
without writing a Blueprint graph or opening the editor.
What this is, and why a separate module¶
S3CompatibleStorageDebug has type DeveloperTool — the same as the test module from
9. Testing — and, the same way, never ends up in a
Shipping build. The difference is what it's for: the test module verifies the plugin itself and
only runs in the editor; this one is a tool for the game, and works in a packaged
Development build too, not just in PIE.
Commands are UFUNCTION(Exec) on a CheatManager extension, so they follow the same rules as
any other cheat command: in multiplayer, the console may require EnableCheats, depending on
how AllowCheats is configured in your GameModeBase.
Unlike the test module, nothing here is simulated. Every command goes through
Get Default S3 Client— the exact same code and the exact same endpoint the packaged game uses.S3Uploadgenuinely uploads a file;S3Deletegenuinely deletes an object.
Commands¶
Every command works against the default bucket (Get Default Bucket — the one in Project
Settings, or in the current profile), so there's no need to name it every time.
| Command | Arguments | What it does |
|---|---|---|
S3Stats |
— | How many transfers are currently running on the default client, and each one's progress |
S3TestConnection |
— | Requests one object from the default bucket — the cheapest way to check that the endpoint and keys work, without a button in Project Settings |
S3ListObjects |
[Prefix] |
Lists up to 50 objects |
S3Upload |
ObjectKey LocalFilePath |
Uploads a local file to the bucket |
S3Download |
ObjectKey LocalFilePath |
Reads an object into a local file |
S3Delete |
ObjectKey |
Deletes a single object |
S3TailRequests |
[Count=20] |
The most recently completed operations — see below |
S3ClearRequestLog |
— | Clears the log S3TailRequests reads |
S3ResumeRecords |
— | Local records of interrupted transfers — in both directions |
S3ClearResumeRecords |
— | Forgets every record above (locally only — see the warning below) |
Every command is asynchronous, just like the operation it calls: the result arrives in the console as a separate line once it finishes, not immediately.
S3TailRequests: the recent-operations log¶
The most useful command for a "something broke, but I don't know what" report. It shows every operation that finished in this process — regardless of which client or which Blueprint graph called it — newest first:
> S3TailRequests 3
LogS3: Display: S3TailRequests: 3 of 47 logged (newest first).
LogS3: Display: [14:32:07] UploadFile - OK (200, 0 retries, 1.42s)
LogS3: Display: [14:31:52] GetObjectTags - FAILED (404, 0 retries, 0.31s) - NoSuchKey The specified key does not exist.
LogS3: Display: [14:30:18] MultipartUpload - OK (200, 2 retries, 8.77s)
The log is a 200-entry ring buffer that lives for as long as the process does: a new game or a
new level doesn't clear it — only S3ClearRequestLog does.
S3ResumeRecords: what's waiting to be resumed¶
Shows what's currently sitting under Saved/S3/Uploads/ and Saved/S3/Downloads/ on this
machine — exactly what the next attempt at the same transfer will pick up, if
Resume Interrupted Uploads / Resume Interrupted Downloads is enabled:
> S3ResumeRecords
LogS3: Display: S3ResumeRecords: 1 upload(s) under Saved/S3/Uploads/, 1 download(s) under Saved/S3/Downloads/.
LogS3: Display: up my-game-saves/big/level_pack.pak (upload 2~AbCdEf..., part size 5242880, source 41943040 bytes)
LogS3: Display: down my-game-saves/big/intro.mp4 -> /Users/you/Movies/intro.mp4 (12582912 of 41943040 bytes, etag 9b2cf1...)
An up line describes an upload to storage,
a down line a download. Exactly how much
has been read comes from the size of the .s3part file, not from the record — the record
itself carries no such counter, so it has nothing to disagree with.
S3ClearResumeRecordsonly clears the local record. Parts that already made it to the provider aren't touched — they keep being billed until they're completed, cancelled, or swept up by a lifecycle rule. That's what S3 Set Incomplete Upload Cleanup is for (chapter 4. Blueprint Operations), not this command..s3partfiles stay on disk too — without their records, they simply stop being usable for a resume.
Next: 13. Profiles in Practice