Building Firefox with Debug Symbols

Building firefox with debug symbols has been a rather tricky endeavor for me for quite some time. The documentation on how to do this seems to indicate that adding these lines to your mozconfig file should be sufficient:

export MOZ_DEBUG_SYMBOLS=1
ac_add_options --enable-debugger-info-modules=yes

should do the trick. However, I have (for months now) been running into this make error: no rule to make nspr4.pdb needed by export whenever I try to build with debug symbols. Bug 338224 has a pending patch for this issue. In the mean time, the following trick seems to solve the problem for me: force the -Zi compiler option into the compiler flags variable. For the nspr files, the PDB file will be generated as desired. For the other files, the -Zi option will be redundant but this fix gets you up and running ASAP. Here’s the associated patch file:

diff --git a/nsprpub/configure.in b/nsprpub/configure.in
--- a/nsprpub/configure.in
+++ b/nsprpub/configure.in
@@ -2827,18 +2827,18 @@ if test -n "$_SAVE_DEBUG_FLAGS"; then
 fi

 if test -n "$MOZ_OPTIMIZE"; then
     CFLAGS="$CFLAGS $_OPTIMIZE_FLAGS"
     CXXFLAGS="$CXXFLAGS $_OPTIMIZE_FLAGS"
 fi

 if test -n "$MOZ_DEBUG_SYMBOLS"; then
-    CFLAGS="$CFLAGS $_DEBUG_FLAGS"
-    CXXFLAGS="$CXXFLAGS $_DEBUG_FLAGS"
+    CFLAGS="$CFLAGS $_DEBUG_FLAGS -Zi"
+    CXXFLAGS="$CXXFLAGS $_DEBUG_FLAGS -Zi"
 fi

 if test -n "$MOZ_OPTIMIZE"; then
     OBJDIR_TAG=_OPT
 else
     OBJDIR_TAG=_DBG
 fi

Here is the mozconfig file I used with this patch:

. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../obj
ac_add_options --disable-xpconnect-idispatch
ac_add_options --disable-activex
ac_add_options --disable-activex-scripting
ac_add_options --disable-accessibility
ac_add_options --enable-optimize=no
ac_add_options --enable-debug-symbols=yes

Building Firefox With Visual C++ Express 2010

I just installed Visual C++ Express 2010 (the most recent version online) in order to build Firefox. However, MozillaBuild has not yet been officially updated to handle Visual C++ 2010. Only 2008 is currently supported as per the build prerequisites. Thankfully, they mention that the trunk version of MozillaBuild should support VC++ Express 2010. The only thing that wasn’t so obvious here (for someone dashing around trying to get building ASAP) was where on earth to look for this. After some totally unnecessary and mostly unhelpful Google-ing around, I ended up at http://hg.mozilla.org/mozilla-build/rev/ad3bd5686474. The necessary start-msvc10.bat and guess-msvc.bat files did the trick.