Troubleshooting¶
Every refusal Pier makes is logged with its reason, so the first step is always the
server console or logs/latest.log. This page lists the lines you will meet and what to
do about each.
A mod does not load¶
| The log says | Meaning | What to do |
|---|---|---|
'x' does not export pier_main |
the DLL is not a Pier mod, or its entry symbol was not exported | build it with your binding's entry macro, or PIER_MAIN_EXPORT in C++ |
'x': pier_main returned false |
the mod refused to start; its own log lines say why | read the lines just above |
'x': an exception left pier_main |
the mod let an exception out of its entry point | fix the mod: nothing may unwind into the host |
'x' was built against Pier ABI vN, below the minimum vM |
the mod predates the current ABI | rebuild the mod against the current SDK |
| a line about the client or the server target | a client build on a server, or the reverse | install the build made for this side |
'x' filled in a vtable of N bytes |
the mod's SDK does not set struct_size |
update the SDK the mod was built with |
the mod is named in mods.disabled |
the operator switched it off | remove it from mods.disabled in config.json |
The server does not start, with error 0x7E¶
0x7E, the specified module could not be found means Windows could not load a DLL that
Pier or a mod depends on. Pier itself loads without its optional dependencies, such as
LegacyMoney; a mod built with MinGW needs the MinGW runtime DLLs next to it, and a mod built
in Debug needs the debug C++ runtime. Rebuild the mod in Release with MSVC or clang-cl, or
ship the DLLs it depends on.
The server froze or exited with code 70¶
Exit code 70 is Pier's watchdog. A mod held a server thread past watchdog.hang_ms, or
past watchdog.shutdown_ms while stopping, and the process was ended so that it can be
restarted. The line before it names the mod, the entry it was stuck in and for how long:
| Text Only | |
|---|---|
Report it to that mod's author. If the mod legitimately works that long at startup, raise
watchdog.hang_ms rather than turning the watchdog off; see
Configuring.
An event never fires¶
- The subscription was refused: a synthetic event named in
hooks.disabledsays so in the log when a mod subscribes. - The payload says why it is incomplete:
_unresolved,partialandtargetKnownare described in Event payloads. - An event that fires on one engine version and not another usually means the engine function it hooks changed. Report it with the Pier and BDS versions from the startup line.
A setting has no effect¶
A key Pier does not read is dropped silently, and a value of the wrong type is ignored with
a line naming the key and the type it wants, such as 'watchdog.hang_ms' wants number, and
the value written there is ignored. config.json is
written once and never rewritten, so a key added in a later release is absent from an old
file and takes its default. Compare the file with the one in
Configuring.
Asking for help¶
Include the Pier and BDS versions, which the first lines of the log carry, the full log from startup to the problem, and the list of mods. A refused load, a watchdog exit and an ignored setting each leave a line in the log with the reason and the name; without the log, that line has to be asked for again.