You are viewing a potentially older version of this package. View all versions.
LethalCompanyModding-UnityDebuggerAssistant-1.4.2 icon

UnityDebuggerAssistant

A BepinEx plugin that captures Harmony and Monomod hook information at runtime to ease debugging

Date uploaded 3 weeks ago
Version 1.4.2
Download link LethalCompanyModding-UnityDebuggerAssistant-1.4.2.zip
Downloads 14092
Dependency string LethalCompanyModding-UnityDebuggerAssistant-1.4.2

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2100

README

UnityDebuggerAssistant

A BepinEx plugin that captures Harmony and MonoMod hook information at runtime to ease debugging

Supported Games

Maintainers

Original Author: Robyn

Current Maintainer(s): Robyn

This mod has been dedicated to the Lethal Company Modding community repo and may be maintained by any willing community member with a github account.

Current Features

  • Enumerates patches from both Harmony and MonoMod/HookGenPatcher
  • Outputs a list of all plugins that modify a specific method when an Exception with a valid trace is thrown
  • Includes useful symbols for debugging such as:
    • Calling Method for the throwing method
    • Defining Assembly Name for the throwing method
      • PluginInfo GUID, Name and Version for Assemblies that contain BepinEx plugins

Configuration

Note

The blacklist works for either stage by matching the given string with the start of the assembly name that either produced the exception (in the exception context) or defined the method (in the frame context). This means that e.g. Unity.Engine will match any assembly name that begins with Unity.Engine such as Unity.Engine.CoreModule

  • Exception Filter

    Note

    Any match at this level discards the entire stack without writing it. This is for filtering whole mods or assemblies that produce useless or ignorable errors.

    • Whitelist
      • Enable Whitelist: enables or disables the whitelist on an exception basis
      • The whitelist cannot be configured but comes pre-loaded with common game assemblies. Enable this to substantially reduce log spam from UDA. Enabled by default
    • Blacklist
      • Enable Blacklist: enables or disables the blacklist on an exception basis
      • The exception blacklist is a comma separated list of assembly names that will be pattern matched against the assembly that threw the exception. Disabled by default.
  • Frame Filter

    (those parts of the log that say ---FrameX)

    Note

    Any match at this level discards only the single frame. This is mostly intended for filtering system or engine assemblies that never seem to have anything useful to say inside a stack frame.

    • Whitelist
      • Enable Whitelist: enables or disables the whitelist on a frame basis
      • The whitelist cannot be configured but comes pre-loaded with common game assemblies. Enable this to slightly reduce log spam from UDA at the cost of less complete frame output when an error occurs. Disabled by default.
    • Blacklist
      • Enable Blacklist: enables or disables the blacklist on a frame basis
      • The black list is a comma separated list of assembly names that will be pattern matched from the start of each frame's method's defining assembly. This is rarely useful except for filtering out specific system assemblies e.g. UnityEngine or mscorlib from your the stack. Disabled by default.

How Does This Help Me?

It might not help you directly but when you go to ask for support and a kind and helpful person asks for your logs this plugin will output more debug information before each exception is written out. It will make their life easier and they will thank you.

CHANGELOG

UnityDebuggerAssistant Changelog

v1.4.2

  • UDA will now guess what the declaring assembly is based on context clues if the exception is missing the required information to obtain it normally. This will be noted in the output with (Guess). This feature is good for when small methods get inlined and merged with their calling methods or when dynamic methods clobber the stacktrace

v1.4.1

  • Correctly determines the patching assembly for harmony patches. (No more blaming mscorlib for everything, whoops!)
  • The exception broker will now send up to 3 exceptions each frame to the handler for processing. This should result in faster responses to exceptions without a substantial increase in overhead.
  • Split whitelist into exception whitelist and frame whitelist
  • Added exception blacklist and frame blacklist

v1.4.0

  • Fixes a potential exception that could occur in ExceptionHandler with SingleOrDefault by replacing it with FirstOrDefault. Thanks: @p1xel8ted on github
  • Switches from non thread safe list to ConcurrentStack to fix potential sync issues in UDAPatchCollector. Thanks: NutDaddy on Discord

v1.3.2

  • Applies whitelist filter setting to main assembly in a given exception

v1.3.1

  • Fixes some missing methods on older games using net standard < 2.1 such as Peaks of Yore

v1.3.0

  • Experimental mode has been folded into the standard handling loop
    • Experimental flag is now removed from the config file
  • The exception handler now processes each frame of each exception and outputs any potential blames for even better debugging

v1.2.1

  • Documentation updated

v1.2.0

  • Adds two new config options
    • EnableWhiteList, enables or disables the built in whitelist for exceptions
    • EnableExperimentalMod, turns on an aggressive but experimental filter mode. Useful for deep debugging but should probably not be used in actual gameplay

v1.1.2

  • Adds a check for null targets in ILHooks which can be sent by MonoMod IL patches

v1.1.1

  • Removes LC specific symbol that stopped it from running on other unity games, whoopsie!

v1.1.0

  • Complete rewrite of Harmony patch handling

    • Understands patches from Prefixes, Postfixes and Finalizers
  • Outputs the caller's defining method for better debugging

  • Should now be game-agnostic

v1.0.3

  • Now checks for broken patches and refuses to handle them

    • Removes crashing
    • No idea if this effects overall quality of logs
  • Now outputs even better symbols

    • Target Method
    • Caller (if applicable)

v1.0.2

  • Now outputs better symbols
    • Declaring Assembly Name for the throwing method
    • PluginInfo GUID, Name and Version for Assemblies that contain BepinEx plugins
  • Update package documents

v1.0.1

  • Initial Release
  • Listens for Harmony or MonoMod Patches
  • Outputs a list of all plugins that modify a specific method when an Exception is thrown targeting that method