Skip to content

{ Category Archives } Debugging

fighting non-deterministic xpcshell unit tests through causality tracking with systemtap; step 1

It’s a story as old as time itself.  You write a unit test.  It works for you.  But the evil spirits in the tinderboxes cause the test to fail.  The trick is knowing that evil spirits are a lot like genies.  When you ask for a wish, genies will try and screw you over by […]

Tagged ,

work-in-progress tooling: feeding GWT SpeedTracer systemtapped mozilla performance data

Now that Thunderbird 3.1 is string/feature-frozen it’s time to focus on performance.  This post is just to make sure that people who are also working on similar things know what I’m up to.  For example, there’s some very exciting work going on involving adding a startup timeline to mozilla-central that everyone keeping up-to-date with mozilla […]

Tagged , ,

performance annotated SQLite EXPLAINation visualizations using systemtap

For the Thunderbird 3.1 release cycle we are not just fixing UX problems but also resolving various performance issues.  Building on my previous work on a visualization of SQLite opcode control flow graphs using graphviz I give you… the same thing!  But updated to more recent versions of SQLite and integrating performance information retrieved through […]

Tagged , , , ,

Using systemtap to figure what your mozilla app’s event loop is up to

==================== ms # —– Event Loop: nsTimerEvent 1233 31 nsProxyObjectCallInfo 19 44 nsStreamCopierOB 1 48 nsStreamCopierIB 0 18 nsProxyCallCompletedEvent 0 44 nsProxyReleaseEvent 0 27 nsTransportStatusEvent 0 19 nsSocketEvent 0 18 nsHttpConnectionMgr::nsConnEvent 0 1 —– Timers: OnBiffTimer(…) 1129 3 nsGlobalWindow::TimerCallback(…) 70 10 nsAutoSyncManager::TimerCallback(…) 29 6 nsExpirationTracker::TimerCallback(…) 1 1 nsIdleService::IdleTimerCallback(…) 0 5 nsExpirationTracker::TimerCallback(…) 0 1 nsHttpHandler 0 […]

Tagged ,

prototype unified JavaScript/C++ back-traces for Mozilla in (archer) gdb

As far as I know (and ignoring my previous efforts on chroniquery along these lines), up until now you had your C/C++ Mozilla backtraces via gdb (chocolate) and your JS backtraces via “call DumpJSStack()” or the debugger keyword from within JS (peanut butter), but these two great flavors had never come together to make a […]

Tagged , ,

Using VMWare Record/Replay and VProbes for low time-distortion performance profiling

The greatest problem with performance profiling is getting as much information as possible while affecting the results as little as possible.  For my work on pecobro I used mozilla’s JavaScript DTrace probes.  Because the probes are limited to notifications of all function invocations/returns with no discretion and there is no support for JS backtraces, the […]

Tagged , , , , , , , ,

Better error reporting for the mozilla platform

If you develop for the mozilla platform, you might be used to error messages like the above.  (Or you might wish you got error messages like the above…)  An uncaught javascript exception has resulted in a message in the error console as well as some equivalent stdout spew because it’s a debug build.  While any […]

Tagged ,

displaying execution traces on a SIMILE timeline

chroniquery can now output JSON for display using the SIMILE timeline widget.  And I am finally done trying to figure out what was going wrong.  Click the pictures to experience the timeline sensation for yourself. Related interesting things: Supports a fancy if specific constraint mechanism.  For example, PrepareAndDispatch is only displayed in the context of […]

Tagged , ,

understanding where unit tests go wrong with object diffs

In our last chroniquery adventure, we used roc‘s chronicle-recorder to trace the execution of an xpcshell unit test and chroniquery (repo info) to use that trace to help us understand what was happening in some particularly confusing C-ish code.  Actually, we’re doing that this time too, but the bag of tricks now contains additional tricks. […]

Tagged ,

gaudily syntax-highlighted code listings in (archer) gdb

Gaudily syntax-highlighted code listing in gdb joins the gaudy gdb plugin family!  (Other members include gaudily colorized backtraces, which you can also see in the bottom of the screenshot.)  This, of course, requires gdb with python crammed inside.  It might require one crammed a few months ago too; I haven’t updated my archer-gdb repo for […]

Tagged , , , ,