mozilla

比较版本

Firefox的调试方法

更改版本

修订版 247050:

由 phenix 在 进行的修订 247050

修订版 222181:

由 phenix 在 进行的修订 222181

标题:
Firefox的调试方法
Firefox的调试方法
网址缩略名:
Firefox的调试方法
Firefox的调试方法
内容:

修订版 247050
修订版 222181
t7    <h2 id=".E6.A6.82.E8.BF.B0">t
8      概述
9    </h2>
10    <p>
11      当我们需要对基于Firefox的插件、组件和扩展等进行调试时,需要首先对firefox进行调试。 获取Firefox的
>调试信息可以有两种方式: 
12    </p>
13    <p>
14      1. 下载Firefox的源代码,重新编译,加入debug信息。即在.mozconfig配置文件中加入
15    </p>
16    <pre>
17<code><code>ac_add_options --enable-debug</code></code>
18</pre>
19    <p>
20      2.&nbsp; 安装Linux发行版的Firefox调试信息程序包。下面以Fedora 10系统为例介绍第2种方式。
21    </p>
22    <h2 id=".E5.AE.89.E8.A3.85.E9.9C.80.E8.A6.81.E7.9A.84.E7.A8.8
>B.E5.BA.8F.E5.8C.85"> 
23      安装需要的程序包
24    </h2>
25    <p>
26      执行以下命令
27    </p>
28    <pre>
29<code>$sudo debuginfo-install firefox</code>
30</pre>
31    <p>
32      安装时会提示安装了以下软件包
33    </p>
34    <pre>
35<span style="font-size: small;"><span><span style="font-family: V
>erdana;"><code>================================================== 
>================================================================= 
>==============================================<br> Package        
>                                        Arch                   Ve 
>rsion                                 Repository                  
>          Size <br>============================================== 
>================================================================= 
>================================================== <br>Installing 
>:  <br>firefox-debuginfo                                     i386 
>                   3.0.11-1.fc10                            updat 
>es-debuginfo                   578 k<br>GConf2-debuginfo          
>                             i386                   2.24.0-1.fc10 
>                            fedora-debuginfo                    5 
>89 k  <br>atk-debuginfo                                         i 
>386                   1.24.0-1.fc10                            fe 
>dora-debuginfo                    182 k  <br>cairo-debuginfo      
>                                  i386                   1.8.0-1. 
>fc10                             fedora-debuginfo                 
>    972 k  <br>fontconfig-debuginfo                               
>    i386                   2.6.0-3.fc10                           
>   fedora-debuginfo                    326 k  <br>freetype-debugi 
>nfo                                    i386                   2.3 
>.7-3.fc10                             updates-debuginfo           
>         2.0 M  <br>gcc-debuginfo                                 
>         i386                   4.3.2-7                           
>        fedora-debuginfo                    101 M  <br>glib2-debu 
>ginfo                                       i386                  
>  2.18.4-2.fc10                            updates-debuginfo      
>              2.4 M  <br>glibc-debuginfo                          
>              i686                   2.9-3                        
>             updates-debuginfo                   9.1 M  <br>gnome 
>-vfs2-debuginfo                                  i386             
>       2.24.0-3.fc10                            fedora-debuginfo  
>                   1.5 M  <br>gtk2-debuginfo                      
>                   i386                   2.14.7-8.fc10           
>                  updates-debuginfo                   8.9 M  <br> 
>nspluginwrapper-debuginfo                             i386        
>            1.3.0-2.fc10                             updates-debu 
>ginfo                   568 k  <br>nspr-debuginfo                 
>                        i386                   4.7.4-1.fc10       
>                       updates-testing-debuginfo           643 k  
> <br>pango-debuginfo                                       i386   
>                 1.22.3-1.fc10                            updates 
>-debuginfo                   1.2 M  <br>startup-notification-debu 
>ginfo                        i386                   0.9-4.fc9     
>                            fedora-debuginfo                    6 
>5  k  <br>xulrunner-debuginfo                                   i 
>386                   1.9.0.11-1.fc10                          up 
>dates-debuginfo                   63  M <br><br>Installing for de 
>pendencies:  <br>glibc-debuginfo-common                           
>      i386                   2.9-3                                
>     updates-debuginfo                    13 M  <br><br>Transacti 
>on Summary <br><br>============================================== 
>================================================================= 
>================================================== <br>Install    
>  17 Package(s)          <br>Update       0 Package(s)          < 
>br>Remove       0 Package(s)           <br>Total size: 205 M <br> 
><br>Is this ok [y/N]:</code></span></span>y</span> 
36</pre>
37    <p>
38      也可以通过命令
39    </p>
40    <pre>
41<code> $sudo yum --enablerepo=fedora-debuginfo,updates-debuginfo 
>install GConf2-debuginfo ORBit2-debuginfo atk-debuginfo \<br> cai 
>ro-debuginfo dbus-debuginfo dbus-glib-debuginfo expat-debuginfo f 
>ontconfig-debuginfo freetype-debuginfo \<br> gcc-debuginfo glib2- 
>debuginfo glibc-debuginfo gnome-vfs2-debuginfo gtk2-debuginfo gtk 
>2-engines-debuginfo \<br> hal-debuginfo libX11-debuginfo libXcurs 
>or-debuginfo libXext-debuginfo libXfixes-debuginfo libXft-debugin 
>fo \<br> libXi-debuginfo libXinerama-debuginfo libXrender-debugin 
>fo libbonobo-debuginfo libgnome-debuginfo \<br> libselinux-debugi 
>nfo pango-debuginfo popt-debuginfo scim-bridge-debuginfo</code> 
42</pre>
43    <p>
44      这里安装的debuginfo需要很多磁盘空间,下载时大概是205M的内容,安装之后需要大概500M的硬盘空间,安装过程
>中需要200M左右的临时文件空间,因此至少应该保证900M以上的磁盘空余空间。 
45    </p>
46    <h2 id=" .E4.BD.BF.E7.94.A8gdb.E8.BF.9B.E8.A1.8C.E8.B0.83.E8.
>AF.95"> 
47      <br>
48      使用gdb进行调试
49    </h2>
50    <p>
51      使用下面的命令启动firefox。
52    </p>
53    <pre>
54$firefox -g -d gdb
55</pre>
56    <ul>
57      <li>-g 告诉Firefox以debug的模式启动
58      </li>
59      <li>-d 指定采用的调试器,这里我们选择的是gdb
60      </li>
61    </ul>
62    <p>
63      执行了以上命令后,系统将打开一个gdb程序,加在调试信息(debugging symbols),之后进入gdb的调试环
>境,如: 
64    </p>
65    <pre>
66<code>MOZILLA_FIVE_HOME=/usr/lib/firefox-3.0.11<br> LD_LIBRARY_PA
>TH=/usr/lib/firefox-3.0.11:/usr/lib/firefox-3.0.11/plugins:/usr/l 
>ib/firefox-3.0.11<br> FONTCONFIG_PATH=/etc/fonts:/usr/lib/firefox 
>-3.0.11/res/Xft<br> DYLD_LIBRARY_PATH=/usr/lib/firefox-3.0.11:/us 
>r/lib/firefox-3.0.11<br> LIBRARY_PATH=/usr/lib/firefox-3.0.11:/us 
>r/lib/firefox-3.0.11/components:/usr/lib/firefox-3.0.11<br> SHLIB 
>_PATH=/usr/lib/firefox-3.0.11:/usr/lib/firefox-3.0.11<br> LIBPATH 
>=/usr/lib/firefox-3.0.11:/usr/lib/firefox-3.0.11<br> ADDON_PATH=/ 
>usr/lib/firefox-3.0.11<br> MOZ_PROGRAM=/usr/lib/firefox-3.0.11/fi 
>refox<br> MOZ_TOOLKIT=<br> moz_debug=1<br> moz_debugger=gdb /usr/ 
>bin/gdb /usr/lib/firefox-3.0.11/firefox -x /tmp/mozargs.NMP1yi<br 
>>GNU gdb Fedora (6.8-32.fc10) Copyright (C) 2008 Free Software Fo 
>undation, Inc. <br>License GPLv3+: GNU GPL version 3 or later &lt 
>;http://gnu.org/licenses/gpl.html&gt;<br>This is free software: y 
>ou are free to change and redistribute it.<br>There is NO WARRANT 
>Y, to the extent permitted by law.  Type "show copying"<br>and "s 
>how warranty" for details.<br>This GDB was configured as "i386-re 
>dhat-linux-gnu"...<br>(gdb)</code> 
67</pre>
68    <p>
69      从上面的提示信息可以看出,实际上上面的命令等效于:
70    </p>
71    <pre>
72<code>$/usr/bin/gdb /usr/lib/firefox-3.0.11/firefox -x /tmp/mozar
>gs.NMP1yi</code> 
73</pre>
74    <p>
75      运行firefox
76    </p>
77    <pre>
78(gdb) run
79</pre>
80    <p>
81      经过一系列的调用过程,firefox将被最终打开。我们可以在地址栏输入测试的页面,进行调试。<br>
82      <br>
83      例如如果这个页面造成firefox崩溃,我们可以运行命令
84    </p>
85    <pre>
86backtrace
87</pre>
88    <p>
89      查看调用的情况。执行结果例如:
90    </p>
91    <pre>
92<code>#0  0x07e16d18 in EventObject::GetSurface () from /home/phe
>nix/.mozilla/firefox/qyvai5...ng@cs2c.com.cn/plugins/moonlight/li 
>bmoon.so <br>#1  0x07e8b945 in PlaylistParser::IsValidPlaylist () 
> from /home/phenix/.mozilla/firefox/qyvai5...ng@cs2c.com.cn/plugi 
>ns/moonlight/libmoon.so <br>#2  0x07e84533 in ASXDemuxerInfo::Sup 
>ports () from /home/phenix/.mozilla/firefox/qyvai5...ng@cs2c.com. 
>cn/plugins/moonlight/libmoon.so <br>#3  0x07e8524c in Media::Open 
> () from /home/phenix/.mozilla/firefox/qyvai5...ng@cs2c.com.cn/pl 
>ugins/moonlight/libmoon.so <br>#4  0x07e85b34 in Media::WorkerLoo 
>p () from /home/phenix/.mozilla/firefox/qyvai5...ng@cs2c.com.cn/p 
>lugins/moonlight/libmoon.so <br>#5  0x07e85bff in Media::WorkerLo 
>op () from /home/phenix/.mozilla/firefox/qyvai5...ng@cs2c.com.cn/ 
>plugins/moonlight/libmoon.so <br>#6  0x007e251f in start_thread ( 
>arg=0xb1cfdb90) at pthread_create.c:297 #7  0x0071804e in clone ( 
>) at ../sysdeps/unix/sysv/linux/i386/clone.S:130</code> 
93</pre>
94    <h2 id=".E8.B0.83.E8.AF.95.E6.8F.92.E4.BB.B6">
95      调试插件
96    </h2>
97    <p>
98      插件是以线程方式工作的。
99    </p>
100    <pre>
101<code>(gdb)info threads <br> *9 Thread 0xb2784b90 (LWP 3210)  0x0
>1203d18 in EventObject::GetSurface () from /home/phenix/.mozilla/ 
>firefox/qyva...ng@cs2c.com.cn/plugins/moonlight/libmoon.so   <br> 
>  8 Thread 0xb3186b90 (LWP 3209)  0x00fe0416 in __kernel_vsyscall 
> ()   <br>  7 Thread 0xb3b87b90 (LWP 3208)  0x00fe0416 in __kerne 
>l_vsyscall ()<br>  6 Thread 0xb692bb90 (LWP 3207)  0x00fe0416 in  
>__kernel_vsyscall ()<br>  5 Thread 0xb5dffb90 (LWP 3206)  0x00fe0 
>416 in __kernel_vsyscall ()<br>  3 Thread 0xb73e0b90 (LWP 3204)   
>0x00fe0416 in __kernel_vsyscall ()<br>  2 Thread 0xb7de1b90 (LWP  
>3203)  0x00fe0416 in __kernel_vsyscall ()<br>  1 Thread 0xb7fe26d 
>0 (LWP 3202)  0x00fe0416 in __kernel_vsyscall ()</code> 
102</pre>
103    <p>
104      在使用gdb调试线程的时候,只有一个线程为活动线程,如果希望得到其他的线程的输出结果,必须使用thread命令切换至指
>定的线程,才能对该线程进行调试或观察输出结果。现在我们的9号线程是活动线程(前面有个星号*)。如果我们想要调试的插件目前不是活动线 
>程,可以通过使用下面的命令进行线程切换。 
105    </p>
106    <pre>
107(gdb)thread 9
108</pre>
109    <p>
110      也可以配合/proc目录进行调试。下面的例子是查看进程打开的文件
111    </p>
112    <pre>
113[phenix@huangsl fd]$ ls -la
114total 0
115dr-x------ 2 phenix phenix  0 2009-07-07 17:25 .
116dr-xr-xr-x 5 phenix phenix  0 2009-07-07 17:25 ..
117lrwx------ 1 phenix phenix 64 2009-07-07 17:25 0 -&gt; /dev/pts/1
118lrwx------ 1 phenix phenix 64 2009-07-07 17:25 1 -&gt; /dev/pts/1
119l-wx------ 1 phenix phenix 64 2009-07-07 17:25 10 -&gt; pipe:[853
>82] 
120lr-x------ 1 phenix phenix 64 2009-07-07 17:25 11 -&gt; pipe:[853
>83] 
121l-wx------ 1 phenix phenix 64 2009-07-07 17:25 12 -&gt; pipe:[853
>83] 
122lrwx------ 1 phenix phenix 64 2009-07-07 17:25 13 -&gt; socket:[8
>5384] 
123l-wx------ 1 phenix phenix 64 2009-07-07 17:25 14 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/.parentlock 
124lr-x------ 1 phenix phenix 64 2009-07-07 17:25 15 -&gt; pipe:[853
>91] 
125l-wx------ 1 phenix phenix 64 2009-07-07 17:25 16 -&gt; pipe:[853
>91] 
126lrwx------ 1 phenix phenix 64 2009-07-07 17:25 17 -&gt; socket:[8
>5394] 
127lr-x------ 1 phenix phenix 64 2009-07-07 17:25 18 -&gt; pipe:[853
>96] 
128l-wx------ 1 phenix phenix 64 2009-07-07 17:25 19 -&gt; pipe:[853
>96] 
129lrwx------ 1 phenix phenix 64 2009-07-07 17:25 2 -&gt; /dev/pts/1
130lr-x------ 1 phenix phenix 64 2009-07-07 17:25 20 -&gt; /dev/uran
>dom 
131lrwx------ 1 phenix phenix 64 2009-07-07 17:25 22 -&gt; socket:[8
>5399] 
132lr-x------ 1 phenix phenix 64 2009-07-07 17:25 23 -&gt; /usr/lib/
>firefox-3.0.11/chrome/en-US.jar 
133lrwx------ 1 phenix phenix 64 2009-07-07 17:25 24 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/permissions.sqlite 
134lr-x------ 1 phenix phenix 64 2009-07-07 17:25 25 -&gt; /usr/lib/
>firefox-3.0.11/chrome/browser.jar 
135lrwx------ 1 phenix phenix 64 2009-07-07 17:25 26 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/places.sqlite 
136lr-x------ 1 phenix phenix 64 2009-07-07 17:25 27 -&gt; /usr/lib/
>xulrunner-1.9/chrome/en-US.jar 
137lr-x------ 1 phenix phenix 64 2009-07-07 17:25 28 -&gt; /usr/lib/
>xulrunner-1.9/chrome/classic.jar 
138lr-x------ 1 phenix phenix 64 2009-07-07 17:25 29 -&gt; /usr/lib/
>xulrunner-1.9/chrome/toolkit.jar 
139lr-x------ 1 phenix phenix 64 2009-07-07 17:25 3 -&gt; pipe:[8536
>3] 
140lr-x------ 1 phenix phenix 64 2009-07-07 17:25 30 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/XUL.mfasl 
141lrwx------ 1 phenix phenix 64 2009-07-07 17:25 31 -&gt; socket:[8
>5409] 
142lr-x------ 1 phenix phenix 64 2009-07-07 17:25 32 -&gt; /usr/lib/
>firefox-3.0.11/chrome/classic.jar 
143lrwx------ 1 phenix phenix 64 2009-07-07 17:25 33 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/search.sqlite 
144lrwx------ 1 phenix phenix 64 2009-07-07 17:25 34 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/formhistory.sqlite 
145lrwx------ 1 phenix phenix 64 2009-07-07 17:25 35 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/places.sqlite-journal 
146lrwx------ 1 phenix phenix 64 2009-07-07 17:25 36 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/content-prefs.sqlite 
147lrwx------ 1 phenix phenix 64 2009-07-07 17:25 37 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/cert8.db 
148lrwx------ 1 phenix phenix 64 2009-07-07 17:25 38 -&gt; /home/phe
>nix/.mozilla/firefox/9ftd6ha2.default/key3.db 
149lr-x------ 1 phenix phenix 64 2009-07-07 17:25 39 -&gt; pipe:[854
>16] 
150l-wx------ 1 phenix phenix 64 2009-07-07 17:25 4 -&gt; pipe:[8536
>3] 
151</pre>
152    <pre>
153$firefox -g -d gdb
154(gdb)break main
155</pre>
156    <p>
157      执行firefox
158    </p>
159    <pre>
160(gdb)run
161</pre>
162    <p>
163      中断,主进程,开始调试插件进程
164    </p>
165    <pre>
166^C
167</pre>
168    <p>
169      调试插件进程
170    </p>
171    <pre>
172(gdb)attach 3210
173</pre>
174    <p>
175      插入断点
176    </p>
177    <pre>
178(gdb)break media.cpp 100
179</pre>
180    <p>
181      继续执行
182    </p>
183    <pre>
184(gdb)continue
185</pre>
186    <h2 id=".E5.8F.82.E8.80.83.E6.96.87.E4.BB.B6">
187      参考文件
188    </h2>
189    <p>
190      <a class="internal" href="/en/Debugging_Mozilla_with_gdb" t
>itle="en/Debugging Mozilla with gdb">Debugging Mozilla with gdb</ 
>a> https://developer.mozilla.org/En/Debugging_Mozilla_on_Linux_FA 
>Q<br> 
191      <br>
192      <a class="internal" href="/En/Debugging" title="En/Debuggin
>g">Debugging</a> https://developer.mozilla.org/en/Debugging 
193    </p>

返回历史