Skip to content

Debugging — first checks

Do not start by changing random code. First classify what you can actually observe.

0NML is not visible

Stay at loader/setup level. A gameplay API cannot fix a loader that never started.

Inspect Player.log →
1C# compile error

Use the exact CSxxxx code and message. Fix compilation before runtime logic.

Compile errors →
2Mod loads, marker missing

Compare your skeleton with the minimal working recipe and inspect nearby loader messages.

Minimal mod recipe →
3Marker exists, feature fails

Your entry path ran. Narrow the test to that one feature and its objects/state.

Choose the symptom →
4Exception appears

Start from the first useful exception and call chain, not every red-looking line in the file.

Analyze signatures →
5Works until reload/restart

Treat it as persistence/lifecycle until evidence says otherwise. Do not assume in-memory state survives.

Check verified boundaries →

A useful reproduction contains:

exact game / NML / dependency versions
smallest save/world state needed
exact steps
expected result
actual result
relevant Player.log excerpt

Remove unrelated systems when possible. If the issue disappears after removing something, that is useful evidence too.

Do not treat every scary log line as the cause

Section titled “Do not treat every scary log line as the cause”

Network/TLS lines and fallback-library messages can exist without being the reason your feature failed. The analyzer labels known noise separately, but a signature match still does not prove root cause.

Next: open the symptom-first Troubleshooter.