New functionality
- Support for capturing metrics to determine crash free users and sessions for your game. Once enabled, unique application launches and unique player identifiers (default:
guid
) will be submitted to Backtrace so you will be able to get an overview in our web console of how many errors, hangs, crashes and memory problems occur compared to all active users for a given platform, version, etcetera. See the README for more info on functionality and configuration options. This functionality is supported on all Unity supported platforms except WebGL. - Support for breadcrumbs. Once enabled, various "breadcrumb" events (such as application going to background, log message, network connectivity lost and many more) will be submitted with all types of Backtrace reports and viewable in the web console. It is possible to configure client-side which events to include and from which log level severity. It is also possible to add custom events, like "player completed a level", via the API. By default the breadcrumbs are limited to 64kB, and when the limit is reached, the oldest events will automatically be removed to make space for newer breadcrumbs. See the README for more information on functionality and configuration options. This functionality is supported on all Unity supported platforms.
Removed
- Support for .NET 2.0 was removed. .NET 2.0 has been end of life for some time. If support is required for .NET 2.0, please use backtrace-unity 3.4.x
Bugfixes
- Fixed Unity 2020 & 2021 warnings
- Adjusted structure size on the iOS build
- Guess backtrace-android native crash reporter path if appcontext is not available
- native/managed attachment support - user can add path to attachments via BacktraceClient Initialize method or via Unity Editor in the BacktraceClient's inspector. Once user add them on the initialization method/game object - it will be available in every report that BacktraceClient will send to Backtrace.
- background thread support - now BacktraceClient will report exceptions/unhandled exceptions generated by any background thread.
- ANR detection improvements - BacktraceClient won't report anymore ANRs detected when the application goes to the background.
thread.main
attribute support - attribute stores an identifier of a main thread. In this situation user can use value available in this attribute to detect main thread.- Backtrace native integration will set
_mod_faulting_tid
attribute for ANR reports to set default faulting thread. - Fixed arabic language bug, that generated an unhandled exception on new Unity message.
- Fixed attachment prefix
attachment__
->attachment_
- Fixed iOS compilation issue with Backtrace namespace.
- Prevent displaying Backtrace configuration when
Application.isPlaying
istrue
.
- ANR detection algorithm now uses
Time.unscaledTime
instead ofTime.time
to prevent ANR detection when game is paused.
- Improved Out-of-memory detection on iOS - Backtrace will report Out-of-memory exceptions when a memory warning occured and the application unexpectly closed. The Out-of-memory watcher will analyse game version, system version, debugger information and even more to determine if application closed by Out-of-memory exception or not.
- Backtrace will no longer send low memory warnings reports from Android or iOS. Instead, Backtrace will utilize iOS OOM detection and extend the embedded native report attributes on Android.
- Users can now enable or disable out-of-memory detection any time via UI/Backtrace API.
BacktraceReport
stack trace now includes the file name of the stack frame.- Performance improvements:
- JSON algorithm performance improvements - avoid analyzing data types.
- improved library attributes management.
- improved Unity logs management.
- Support for Low Memory error reports on Anrdoid and iOS (these are sometimes referred to as OOM or Out Of Memory errors). If a low memory situation is detected, backtrace-unity will attempt to generate and submit a native error report to the Backtrace instance. The report will have the
error.type
value ofLow Memory
. - New support for hang detection on Android and iOS. If a game experiences non responsiviness after 5 seconds, backtrace-unity will generate an error report to the Backtrace instance. The report will have the
error.type
value ofHang
.
BacktraceClient
will apply sampling only to errors lacking exception information.- Fixed annotations nullable value.
- Renamed
BacktraceUnhandledException
classifier, which was generated from a Debug.LogError call, toerror
. - Fixed nullable environment annotation value.
- Added
BacktraceClient
Initialization method that allows developer to intialize Backtrace integration without adding game object to game scene. - Fixed invalid
meta
file for iOS integration for Unity 2019.2.13f1. - HTTP communication messages improvements - right now Backtrace-Unity plugin will print only one error message when network failure happen. Backtrace-Unity will stop printing failures until next successfull report upload.
- Sampling skip fraction - Enables a new random sampling mechanism for BacktraceUnhandledExceptions (errors from Debug.LogError), by setting default sampling equal to 0.01 - which means only 1% of randomly sampled Debug.LogError reports will be send to Backtrace. If you would like to send all Debug.LogError to Backtrace - please replace 0.01 value with 1.
Be aware
By default Backtrace library will send only 1% of your Debug.LogError reports - please change this value if you would like to send more Debug.LogErrors to server.
- Fixed Backtrace-Unity NDK integration database path.
- Backtrace offline database will now store 8 reports by default. Previously this was not set by default.
- HTTP client communication improvements
- Improvements in UPM
- Updated symbolication strategy on iOS crashes
- Fixed native iOS attributes
- Android stack trace parser improvements,
- Fixed Android NDK initialization when database directory doesn't exist,
- Added Privacy section to Readme
- This release adds the ability to capture native iOS crashes from Unity games deployed to iOS. The Backtrace Configuration now exposes a setting for games being prepared for iOS to choose
Capture native crashes
. When enabled, the backtrace-unity client will capture and submit native iOS crashes to the configured Backtrace instance. To generate human readable callstacks, game programmers will need to generate and upload appropriate debug symbols. - Added default uname.sysname attributes for some platforms. The following is the list of uname.sysname platforms that can be populated. list "Android, IOS, Linux, Mac OS, ps3, ps4, Samsung TV, tvOS, WebGL, WiiU, Switch, Xbox". Note 'Switch' had previously been reported as 'switch'
- Added a new attribute 'error.type' that allows developers to quickly filter error reports based on the type of error - The list includes "Crash, Message, Hang, Unhandled Exception, Exception".
- Updated Android NDK libraries used by Unity plugin.
BacktraceData
allows to edit list of environment variables collected byBacktraceAnnotations
SourceCode
object description for PII purposeAnnotations
class exposes EnvironmentVariableCache dictionary - dictionary that stores environment variables collected by library. For example - to replaceUSERNAME
environment variable collected by Backtrace library with random string you can easily edit annotations environment varaible and Backtrace-Untiy will reuse them on report creation.
Annotations.EnvironmentVariablesCache["USERNAME"] = "%USERNAME%";
Also you can still use BeforeSend event to edit collected diagnostic data:
client.BeforeSend = (BacktraceData data) =>
{
data.Annotation.EnvironmentVariables["USERNAME"] = "%USERNAME%";
return data;
}
- Prevent erroneously extending backtraceClient attributes with backtraceReport attributes.
- Removed randomly generated path to assembly from callstacks.
- Prevent client from multi initialization.
This release adds an ability to capture native NDK crashes from Unity games deployed on Android. The Backtrace Configuration now exposes a setting for games being prepared for Android OS to choose Capture native crashes
. When enabled, Backtrace will capture and symbolicate native stack traces from crashes impacting the Unity Engine or any Unity Engine Plugin.
When develoing for Andriod, Unity users who want to debug native NDK crash report can specify a Backtrace Symbols Server Token to support the optional uploading of debug symbols from Unity Editor to Backtrace during build. Uploaded symbols are needed to generate human readable stack trace with proper function names for identifying issues.
Backtrace library now allows to set client attributes, that will be included in every report. In addition to that, Backtrace client attributes will be available in the native crashes generated by Android games.
To setup client attributes you can simply type
BacktraceClient["name-of-attribute"] = "value-of-attribute";
If you already have dictionary of attributes you can use SetAttributes
method.
Preliminary Nintendo Switch support has been introduced. The offline database is not currently supported in this version, but will be included in an upcoming release.
This release includes significant improvements to performance by way of report filtering as well as improved performance diagnostics. Learn more below.
BacktraceClient
now supports report filtering. Report filtering is enabled by using theFilter reports
option in the user interface or for more advanced use-cases, theSkipReport
delegate available in the BacktraceClient.
Sample code:
// Return true to ignore a report, return false to handle the report
// and generate one for the error.
BacktraceClient.SkipReport = (ReportFilterType type, Exception e, string msg) =>
{
// ReportFilterType is one of None, Message, Exception,
// UnhandledException or Hang. It is also possible to
// to filter based on the exception and exception message.
// Report hangs and crashes only.
return type != ReportFilterType.Hang && type != ReportFilterType.UnhandledException;
};
For example, to only get error reporting for hangs or crashes then only return false for Hang or UnhandledException or set the corresponding options in the user interface as shown below.
- Support for backtrace-unity timing observability. To enable sending performance information to Backtrace set the
Enable performance statistics
option in the UI. Attributes are created under the performance.* namespace, time unit is microseconds:- Report creation time (
performance.report
), - JSON serialization time (
performance.json
), - Database add operation time (
performance.database
), - Database single send method time (
performance.send
), - Database single flush method time (
performance.flush
)
- Report creation time (
- Improvements to JIT stack frame parsing.
BacktraceDatabase
now provides a newSend
method. This method will try to send all objects from the database respecting the client side deduplication and retry setting. This can be used as an alternative to theFlush
method which will try to send all objects from the database ignoring any client side deduplication and retry settings.BacktraceClient
has been optimized to only serialize data as needed.BacktraceDatabase
AutoSend
function has been optimized for performance improvements.BacktraceClient
by default will generate configuration file with client rate limit equal to 50.- Fixed invalid meta file.
- The
BacktraceDatabase
class will now create database directory before final database validation. Previously, when directory didn't exist, BacktraceDatabase was disabled. - The
BacktraceDatabase
field now allows users to pass interpolated string in Database options. Developer can use${Application.dataPath}
or${Application.persistentDataPath}
to set path to database. - The backtrace-unity library will generate screenshot image files in .jpg format.
- Optimizations in ANR watchdog and
BacktraceLogManager
initialization - The Backtrace client will now create a class instance ofBacktraceAnrWatchdog
class, instead of creating instance via static class method. TheBacktraceLogManager
(class responsible for storing log data) will be initialized inCaptureUnityMessages
.
New Features
- The backtrace-unity library (Backtrace) now allows detection of ANR (Application not responding) events on Android devices.
- Unhandled exception output from the Unity runtime and executables is now prominently displayed in the Debugger.
- Backtrace will try to guess unhandled exception classifier based on exception message/stack trace.
- Backtrace now allows you to add Unity player.log file as an attachment.
- Backtrace now allows you to add a screenshot as an attachment when an exception occured.
- Backtrace now allows you to capture last n lines of game logs. You can define how many lines of logs Backtrace should store by settings
Collect last n number of logs
property in the Unity editor. - Backtrace will capture any native Unity Engine crash dumps on Windows OS.
- Backtrace will capture and index native metadata from the Android OS as Backtrace Attribuces, including vm, system.memory, and device details.
- Backtrace allows you control whether or not a report should send via the BeforeSend event. If you return a null value from a BeforeSend event, Backtrace will discard the report and not send.
General Improvements
BacktraceClient
,BacktraceReport
,BacktraceData
,BacktraceData
andBacktraceDatabase
now allow users to pass attributes in dictionary form with string key and string values. Attributes must now be provided with the Dictionary<string, string> data structure to allow the serializer to be as fast as possible.- Removed dependancy on 3rd party JSON.NET library to reduce the size of the package. Backtrace-unity now provides it's own serializer for BacktraceReport usage.
- Further reduction in size of Backtrace.Unity assembly with BacktraceJObject.
BacktraceDatabase
won't try to deserializeBacktraceReport
anymore - because of that, callback api won't returnBacktraceReport
object inBacktraceResult
.BacktraceDatabase
won't use anymoreAdd
method with BacktraceReport parameter. Instead,BacktraceDaatabase
will useAdd
method with BacktraceData parameter. PreviousAdd
method is deprecated and will be removed in next major release.- Support has been improved for parsing unhandled exception output from the Unity runtime and Unity executables.
NOTE: When migrating from previous releases, there is an API change that developers will want to uptake for attribute submission. Specifically, attribute definitions previously used a signature
attributes: new Dictionary<string, object>() { { "key", "value" } }
,
In this release, we made a change to require a string for the value instead of an object for faster performance.
attributes: new Dictionary<string, string>() { { "key", "value" } }
,
Bug Fixes
- Annotation name typo - updated
children
fromchildrens
- Handling special case for string reports fingerprint when stack trace is empty.
- Backtrace Unity plugin UI improvements - added tooltips, headers and collapsible menu for advanced options.
- Changed Client-side deduplication menu,
BacktraceClient
now allows you to choose what type of fingerprint Backtrace should generate for reports without stack trace.Use normalized exception message
allows you to use a normalized exception message to generate fingerprint, instead of stack trace.- Added exception source code information to exception and message type of reports.
EnvironmentVariable
class now will handle correctly nullable key/values,BacktraceAttributes
handle correctly nullable values.
BacktraceUnhandledException
will generate environment stack trace if Unity stack trace is empty. BacktraceReport will still generate normalized fingerprint for unhandled exception without stack trace.BacktraceUnhandledException
will provide information from Unity Error logger in source code property, which should improve error analysis in web debugger.BacktraceAttributes
won't try to collectAnnotations
anymore.Annotations
won't use ComplexAttributes property anymore.
BacktraceReport
will generate report fingerprint for exceptions without stack trace.- Changed game object depth default property value.
- Added Exception information to the Annotation object.
- UPM modifications - fixed editor assembly definition,
- Hiding Documentation and Scripts folders
- Added Mac and Rider files to .gitignore
- Moved Backtrace Configuration create menu deeper into the hierarchy
- UPM support - changed project structure and divide Backtrae-unity plugin into assemblies.
- Unity compatibility patch - .NET2.0, .NET 3.5 support (backtrace-labs#10).
- Untiy .NET Standard 2.0 support.
- Expose minidump type option to Backtrace Client configuration in the UI.
- Changed values of LangVersion to Mono or IL2CPP, depending on which is deployed.
- Changed
Game object depth
property - default to-1
, which means not to include Game Objects Hierarchy as an Annotation in the error report. Set the value to1
to collect one level deep of Gane Object hierarchy,2
to collect two levels deep, and so on. Setting the value to0
will collect the full depth, which may be rather large if you have a lot of children.
- Added Game object depth property that allows developer to filter game object childrens in Backtrace report
- Changed "Destroy client on new scene load" label. Now: "Destroy client on new scene load (false - Backtrace managed),
- added namespaces to
XmlNodeConverter
class, - Added correct path to source file in
BacktraceUnhnandledException
, - Changed line endings in
BacktraceDatabase
,ReportLimitWatcher
,BacktraceClient
files, - Changed
ReactTransform
casting toComponent
inAnnotations
class. With this change Backtrace library should correctly send all game objects to Backtrace, - Changed a way how we guess game assets directory.
- Annotations object will validate game object before converting it.
- Fixed invalid cast for nested game objects in Backtrace Attributes,
- BacktraceClient will print message only once per report rate limit hit per 1 minute.
BacktraceDatabase
Send
method will check client rate limit after each send.BacktraceClient
andBacktraceDatabase
won't generate warning onDisabled
event.
BacktraceApi
won't print anymore Error message when Backtrace-integration cannot send data to Backtrace. NowBacktraceApi
will print warning instead.
- Backtrace-Unity plugin will set
"Destroy object on new scene"
by default to false. - Backtrace stack trace improvements,
BacktraceDatabase
retry method now respect correctlyBacktraceDatabase
retryInterval
property,- New
Backtrace Configuration
won't override existingBacktrace Configuration
in configuration directory. - Backtrace-Unity plugin tests now won't override some files in Backtrace-Database unit tests,
- Backtrace-Unity plugin now allows you to setup client-side deduplication rules via
Fingerprint
. By using this field you can limit reporting of an error that occurs many times over a few frames. - Backtrace report limit watcher feature now will validate limits before BacktraceReport creation.
BacktraceClient
andBacktraceDatabase
now exposeReload
method. You can use this method do dynamically changeBacktraceClient
/BacktraceDatabase
configurations.
- Added support to DontDestroyOnLoad property. Right now users might use this property to store
BacktraceClient
/BacktraceDatabase
instances between all game scenes. - Added more attributes to
BacktraceReport
object, - Added scene game objects information to
BacktraceReport
annotations.
- Added support for servies under proxy (removed backtrace.sp conditions)
- Removed error log when unity-plugin receive status code: 200 on attachment upload.
- Changed a way how Unity-plugin upload attachments to Backtrace via
submit.backtrace.io
- Detailed log information when Unity plugin cannot send data to Backtrace,
- Unhandled exception condition that wont catch exceptions that starts with string :
[Backtrace]::
, - Added support for system stack frames,
- Line ending fix.
- Support for multiple types of Attribute types - string, char, enum, int, float, double....
- Support for submit.backtrace.io
- If you send exception,
BacktraceReport
will generate stack trace based on exception stack trace. We will no longer include environment stack trace in exception reports, BacktraceDatabase
fix forFirstOrDefault
invalid read,- Fixed duplicated global exception handler,
- Fixed typo in debug Attribute,
- Fixed stack trace in
BacktraceUnhandledException
object,
First Backtrace-Unity plugin version