Introducing FooBar: Integrated Bug Reporter

1264368--55787--$FooBar_icon.png

FooBar is now Released and available on the Asset Store for $5

WebPlayer Demo here: http://www.ducttapegames.com/foobar/index.html
Note: Email Functionality disabled in demo.

Please ask any questions or add any comments here, currently there is no support site for FooBar

What is FooBar:
FooBar is an integrated bug reporter for Unity Projects. It allows users of your game to quickly and easily create a bug report and send it via email or save it to disk to be sent later.
FooBar is intended for use in Alpha/Beta or Demo releases among a test audience, but it can be used for wider release.
FooBar can be set to to capture Log Output, and prompt the user to create a bug if an exception occurs in the code, making troubleshooting and bug squashing easier than ever.
By supporting a Custom GUISkin, you can ensure FooBar looks just like any other GUI in your game, or leave it as the default unity GUI skin.

Features:

  • Quick and Easy Bug Report Form for Users.
  • Saves Log Output data for ease of troubleshooting.
  • Auto Detects runtime errors, and prompts the User to create a Bug Report.
  • Detects “infinite” exception loops and alerts the User.
  • File can be saved to disk, or Sent as an email attachment.
  • Customisable Bug Categories.
  • Intelligently manages the Bug File size, ensuring it doesn’t exceed a customisable limit.
  • Supports custom GUISkins.
  • Supports Standalone and Webplayer* builds (other platforms untested).
  • Settings to Pause the game and/or unlock the mouse when creating a Bug Report.
  • Works with Unity Free.
  • Well commented C# code.
  • Thorough Setup and Usage guide

F.A.Q

  1. Does FooBar work with GUI packages/extensions (ie: NGUI)?
    a) FooBar uses the standard Unity GUI with the GUILayout.Window class used to display everything. It should work with something like NGUI, but may result in some unexpected behaviour.
  2. Does FooBar work with other languages, or only C#?
    a) FooBar is written in C#, but there is no reason it won’t work with projects writen in other languages.
  3. Why aren’t my bug reports showing stacktraces?
    a) Stacktraces will only show correctly if the “Development Build” flag is set, otherwise you will still get the Log Output, but only errors will show where they came from.

Email. Really? I think you should make extension to post to bug tracker or database.

Are you able to track exceptions? What kind of exceptions.

Hi imtrobin

I agree a database is a much better solution than emails, particularly for larger projects, and have done some design work around using one.
My plan is to include DB integration with Version 2.0 of FooBar.

Unfortunately it came down to time constraints, and the amount of work to create a solid DB interface (front end and back end) would have meant I was spending too much time on what started out as a side project.
(FooBar started off as a tool for beta testing a specific game, and I decided to work on it further and release it)

I’m not quite sure what you mean by “track” in this context.
All Log Output is captured by FooBar as the game runs, and if that Log is an Exception, Error or Warning, a prompt will appear.
Common examples would be IndexOutOfRange exceptions, or NullReference exceptions.

The Log Capture is put into the file created by FooBar, here is a small sample:
(using code tags to maintain formatting, the file that gets sent is plain text with no highlighting)

5/19/2013 1:54:25 AM +0000;[LOG];0
	UnityEngine.Debug:Log(Object)
	FooBarTester:BreakLog() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:33)
	FooBarTester:Start() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:17)
5/19/2013 1:54:25 AM +0000;[LOG];1
	UnityEngine.Debug:Log(Object)
	FooBarTester:BreakLog() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:33)
	FooBarTester:Start() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:17)
5/19/2013 1:54:25 AM +0000;[LOG];2
	UnityEngine.Debug:Log(Object)
	FooBarTester:BreakLog() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:33)
	FooBarTester:Start() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:17)
5/19/2013 1:54:25 AM +0000;[LOG];3
	UnityEngine.Debug:Log(Object)
	FooBarTester:BreakLog() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:33)
	FooBarTester:Start() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:17)
5/19/2013 1:54:25 AM +0000;[LOG];4
	UnityEngine.Debug:Log(Object)
	FooBarTester:BreakLog() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:33)
	FooBarTester:Start() (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:17)
5/19/2013 1:54:25 AM +0000;[EXCEPTION];IndexOutOfRangeException: Array index is out of range.
	FooBarTester.BreakLog () (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:32)
	FooBarTester.Start () (at C:/Users/Public/Documents/Unity Projects/FUBAR/Assets/FooBar/FooBar Scripts/FooBarTester.cs:17)

ok, I thought you are trapping exceptions as in exceptions we throw, in a global try/catch,

I’m not sure if people will pay for an email bug reporter but I would pay more for a decent solution.

It won’t trap any exception like a try/catch block would, just log them and alert the player.

Thanks for taking an interest at any rate, and keep your eye out for Version 2 (No ETA on that though, probably not any time soon unless there is high demand as I am working on other projects)

I’ll be updating the first post with a webplayer demo link shortly.

FooBar is now available!
Asset Store Link:

Web Player Demo:
http://www.ducttapegames.com/foobar/

I think it would be better if instead of emailing (or a database or whatever), it could get a custom handler attached to get that data do whatever we want with it, but really needs to be catch all not just log, does it catch exceptions from the log at least? Or is it just raw text?

Does this require Fogbugz or stand-alone?

A customer handler would be the easiest thing to implement indeed.
The code is robust enough to set something up fairly easily as well, I’ll start working on it as a 1.5 version.

I’m not sure that a global try/catch would be particularly useful, give that Unity is generally pretty good at not crashing for most exception types that I’ve seen crop up in code.

The logging is done by using the Application.LogCallback function, so it grabs the text from the exception as well as the stack trace etc like what you would see in the Console in the Unity Editor (an example of the output is in a post above, or you can check out the WebPlayer Demo)
By the time that function is called, the exception has already occurred, so it can’t then be handled the way a try/catch block would do it.

I’m not sure that I’m answering the question you are asking properly, does what I’ve said make sense?

Completely stand-alone, though you will need a Web server and mail server to use some of the functionality.
This is the first I’ve heard of FogBugz, so it’s certainly not required!

I think this looks interesting for the small price : )

There was a small bug with one of the PHP files in the initial release, which will cause webplayer builds to not be able to save files correctly.

I’ve submitted a working version, but until it gets approved, the issue can be fixedby changing line 10 of FooBar_webplayer.php from:

if(isset($_SESSION['file'])  isset($_POST['bug']))

to

if(isset($_SESSION['file'])  isset($_SESSION['bug']))

EDIT
The fixed version is now uploaded to the Asset Store