Releases: blueshank-gh/plugin_crashcapture
Release list
v1.5.1
Full Changelog: v1.5.0...v1.5.1
Features
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
Client Isolation
Because some servers do not like client-state being tampered with, or the server's own trust towards users aren't maintained, this solves that issue by blocking the client-state from having the API & Pulse from existing.
Console Commands
We now have console commands under the cc_* prefix, this allows you to have control without the need for lua execution.
New Patch
gm.phys.mindist_event_illegal - patches the assert and fixes the teardown from mindist's illegal event.
Installation
This is a list of possible routes for you to install the binary into the game engine.
I highly recommend carefully reading which ones you would like to chose.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.5.0
What's Changed
- milestone v1.5.0 by @blueshank-gh in #35
Full Changelog: v1.4.0...v1.5.0
Features
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
Hang Mapper
The code bellow was used to intentionally hang the server based on #33
Hang mapper is expected to indicate several locations of interest based on this as Lua and C is traversed.
local f = file.Open("gmod.exe", "rb", "BASE_PATH")
while true do f:ReadByte() end
Profiler Improvements
On v1.4.1 there was confusion on the method of profiling from lua:hook.lua's self-ms and downstream hooks, this is no longer the case to clear up confusion.
This also comes with addition support for command lua boundary to profile the execution of console commands.

API Layer
A new API layer was added to this PR to allow for third-party binary developers to make use of:
#include "crashcapture_api.h"
#ifdef _WIN32
#define EXPORT_GM13 extern "C" __declspec(dllexport)
#else
#define EXPORT_GM13 extern "C" __attribute__((visibility("default")))
#endif
EXPORT_GM13 int gmod13_open(struct lua_State* L)
{
CCAPI* cc = CC_ENSURE_API(); // I would cache this in a static variable...
cc->dump("example_dump"); // force a dump
return 0;
}
EXPORT_GM13 int gmod13_close(struct lua_State* L)
{
return 0;
}Installation
This is a list of possible routes for you to install the binary into the game engine.
I highly recommend carefully reading which ones you would like to chose.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.4.0
What's Changed
- feature - guidelines, templates and contributing by @blueshank-gh in #26
- milestone - v1.4.0 - integrated patcher by @blueshank-gh in #27
Full Changelog: v1.3.0...v1.4.0
Features
Note
This release was edited to contain a latent patch.
See commit ebdf3ea
Version uplifted to v1.4.1
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
This version of crash capture implements a patcher with traceability, which serves as a way to quick-fix issues within the game engine.
The current set of patches are the following targeting vphysics:
gm.phys.contact_stale_core - gmod IVP teardown UAF
gm.phys.mindist_null_edge - gmod IVP retained-mindist UAF
gm.phys.mindist_stale_ff - gmod IVP retained-mindist UAF
gm.phys.oo_collision_hash_index - gmod IVP OO-watcher collision-hash sign-extension
gm.phys.oo_collision_hash_swap - gmod IVP OO-watcher collision-hash sign-extension
gm.phys.watcher_stale_mindist - gmod IVP teardown UAF - stale mindist double-removal
gm.phys.ovtree_hash_remove - gmod IVP teardown UAF
gm.phys.vhash_remove_null - gmod IVP VHash absent-key fatal
gm.phys.minlist_walk_bound_a - gmod IVP min-list walk bound
gm.phys.minlist_walk_bound_b - gmod IVP min-list walk bound
gm.phys.minlist_skip_list - gmod IVP min-list skip-list (long-jump) corruption
gm.phys.minlist_replace - gmod IVP min-list add() replacement (skip-list corruption fix)
gm.phys.ctrl_remove_absent - gmod IVP teardown UAF
gm.phys.coc_absent_bail - gmod IVP controller-list UAF
gm.phys.vhash_store_remove_bound - gmod IVP friction-hash unbounded scan
gm.phys.friction_hash_init_size - gmod IVP friction-hash warmup
The purpose of the patcher is to provide everyone with patches that Facepunch has yet to implement or have been abandoned, similar to vphysic's current issue that prevents Facepunch from implementing said patches.
Installation
This is a list of possible routes for you to install the binary into the game engine.
I highly recommend carefully reading which ones you would like to chose.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.3.0
What's Changed
- feature - high performance profiler for c -> lua transitions by @blueshank-gh in #21
Full Changelog: v1.2.2...v1.3.0
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
This contains a new high performance runtime profiler.
Unlike traditional profilers such as lua-based profilers to vprof, this can be run with virtually no noticeable performance loss.
Implementation of #19
Fixes #12
Using the profiler functions you can create your own high performance profiler dashboard like this:
high performance profiler dashboard example
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.2.2
Full Changelog: v1.2.1...v1.2.2
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
This contains patches to the vphysics recovery methods, specifically those we have caught under Buildstruct's endurance tests.
We have also patched up issues with ELF load base and RVA for stack tracing.
Also having realized that the features we created where not exposed to lua, so now they are.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.2.1
Full Changelog: v1.2.0...v1.2.1
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
We have added an new MEMAPI to the main lua_State, and before you ask, its gated behind CRASHCAPTURE_MEMAPI.
crashcapture.set cannot change it, must be done at either the ENV or PARAM level.
fixed #16 - Crashlog generate twice on engine error
addition #17 - Make crashlog names more user friendly
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.2.0
Full Changelog: v1.1.1...v1.2.0
Warning
We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.
This is a major milestone in the development of crash capture, features and refactoring.
We now support hooking/signature scanning fully, with features baked for vphysics hang mitigations.
We now also support in-game console outputs and sign on grace periods.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Note
Client native linux builds are experimental due to a lack of testing infrastructure.
v1.1.1
Full Changelog: v1.1.0...v1.1.1
You can now trigger a manual dumb via signals to the process!
There are several ways you can attach the binary to your game process.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
v1.1.0
Full Changelog: v1.0.0...v1.1.0
This version now comes with hooks, allowing you to diagnose recoveries on the main lua_State!
There are several ways you can attach the binary to your game process.
Note: this release was edited to include a latent patch:
81b2d0a - patch - end grace period as soon as pulse arrives
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
v1.0
Full Changelog: https://github.com/blueshank-gh/plugin_crashcapture/commits/v1.0.0
Crash Capture - Captures failures from garry's mod and generates reports
This is the first release of binaries from artifacts.
There are several ways you can attach the binary to your game process.
Windows
- Rename the CL/SV binary into
version.dlland place it near the executable of garry's mod - Rename the CL/SV binary as
gm(cl/sv)_crashcapture_win(32/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
Linux
- Rename the CL/SV binary as
gm(cl/sv)_crashcapture_linux(null/64).dlland place it in the lua/bin folder for require - Place the SV binary as a plugin in lua/bin folder and create a
.vdfin the addon's folder to load it - Inject the CL/SV binary into the garry's mod process
