2007 C# .NET, Python developer Religious about good code, software design, TDD, SOLID Love to learn new stuff Toolsmith for Unity Technologies Fun Microsoft booth at NDC Oslo 2016
called Bug Reporter ❏ Allows you to send editor logs, project, along with description of the problem ❏ Uses FogBugz as a bug tracking system Crashes are no different, crash data is written to the editor log
million of registered users QA were unable to keep up with amount of reports coming in (~6k monthly) Every report has to be reproduced, before handed to devs for resolution, but only 15% turn out to be real bugs Crashes cause high user pain and should be addressed first
other bugs Can’t tell if two crashes are the same or different No metrics to tell the frequency of certain crashes, hence no way to prioritize Lots of duplicate work
platform ❏ Open source ❏ Symbols are separated from the app Cons: ❏ Set of libraries to produce callstacks but no processing server ❏ Cannot resolve Mono (C#) frames
platform and it works (including Mono) We have to deal with reports already sitting in our bug tracking system Maybe we are better off just building our own processing tool (in the words of Bert Lance: “if it ain’t broke don’t fix it”)?!
20k crash reports produced 13k buckets - ⅔ turned out to be unique Top frame only matching: if it crashed in the same function, maybe it is the same problem
(case from FogBugz) Crash - lower level container, combines reports with (nearly) identical callstacks (GIST) Bucket - top level container, combines reports with identical crashed function (same top frame) Recent numbers: 80k reports in 22k crashes across 4.5k buckets (4.5k reports in the biggest bucket)
Slack channel & integration to let everyone interested know Alone with brief description (version, callstack), so if it is your area as the developer, you can try work on it before it becomes massive problem for everyone
a duplicate Message contains: • Unity version • Bucket name (top frame, crashed function) • Ids of the case and possible repro Still requires human to make the final call
crash processing - detect duplicates on the client Out-of-process crash collecting and automated mini dump sending Bucketing is still hard - allow to manually split or combine buckets, maybe apply machine learning to learn more Map buckets to areas in the code (Physics, Graphics, etc)
try to find out-of-the-box solutions instead of building your own Consider using Breakpad if you need cross platform crash collecting Focus on one problem at a time, instead of building a starship At large scale try to automate and bucket things up, prioritize work Split crash reporting from bug reporting
years of debugging in the large (article): http://www.sigops.org/sosp/sosp09/papers/glerum-sosp09.pdf Breakpad: https://chromium.googlesource.com/breakpad/breakpad/ Socorro: https://wiki.mozilla.org/Socorro