Remote debugging

When a bug is reproducible by a community member, but not on a developer's computer, a last-resort strategy is to debug it on the community member's computer. The crash victim should at least know how to run a debugger, if not how to use it, and should have a debug build of Firefox handy.

This requires quite a bit of trust, in both directions. The developer trusts that his time is not being wasted: the crash is a real bug in Firefox. (That is, there's a legitimate reason it happens only on some computers, but that reason just hasn't been discovered.) The crash victim, in turn, trusts the developer with full access to his computer.

A good place to start is a detailed stack (in gdb, use bt followed by bt full). There give more information about the stack than a Breakpad crash report: not only the names of the functions on the stack, but also the values they were passed.

Core dump

A core dump includes all of the memory of a crashed program. It allows you to see the crash in a debugger even after the program has long exited.

Transferring a core dump is tricky, because it is large and can contain private information.

Core dumps on Mac and Linux

To generate a core dump on Mac, type "ulimit -c unlimited", run Firefox from the command line, and make Firefox crash. When Firefox crashes, a core will be placed in /Cores. You can then load the core file into gdb (gdb firefox-bin corefile), and it will be as if you caught the crash while running Firefox under gdb!

When transferring a Mac or Linux core dump, you'll also have to transfer the Firefox executable (and maybe more).

Core dumps on Windows

On Windows you can produce a "minidump". See here for instructions on how to do so with Microsoft's free debugger, WinDBG.

Debugging over Bugzilla

Explain in the bug that you have a core file or can reproduce the crash as many times as needed. The developer can give you appropriate commands to type into the debugger.

Examples: 367650, 374356, 393325, 418139

Debugging over IRC

Find the developer on IRC and explain that you've caught the bug in a debugger. Since debugging usually requires printing many objects, this is much faster than debugging over Bugzilla. Use for anything too long to paste into IRC.

Examples: 391851

Share your computer with remote desktop

Offer to let a developer control your computer using Remote desktop software such as VNC or Fog Creek Copilot.

Share your computer in person

If you happen to live in Mountain View, California, you can probably hand your laptop to a Mozilla developer for a bit.

Examples: 496391, 476241