⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 使用 gdb 调试 linux 软件.htm

📁 GDB相关资料,整理的真的很辛苦,希望大家好好珍惜
💻 HTM
📖 第 1 页 / 共 4 页
字号:
                              <BR>#0 0x80483ea in wib (no1=8, no2=8) at eg1.c:7 
                              <BR>#1 0x8048435 in main (argc=1, argv=0xbffff9c4) 
                              at eg1.c:21 <BR>此结果显示了在 main() 的第 21 行中调用了函数 
                              wib()(只要使用 list 21 就能证实 <BR>这一点),而且 wib() 在 0 
                              号帧中,main() 在 1 号帧中。由于 wib() 在 0 号帧中 
                              <BR>,那么它就是执行程序时发生算术错误的函数。 <BR>实际上,发出 info locals 
                              命令时,gdb 会打印出当前帧中的局部变量,缺省情况下, <BR>这个帧中的函数就是被中断的函数(0 
                              号帧)。可以使用命令 frame 打印当前帧。要查 <BR>看 main 函数(在 1 
                              号帧中)中的变量,可以发出 frame 1 切换到 1 号帧,然后发出 <BR>info 
                              locals 命令: <BR>(gdb) frame 1 <BR>#1 0x8048435 in 
                              main (argc=1, argv=0xbffff9c4) at eg1.c:21 <BR>21 
                              result = wib(value, div); <BR>(gdb) info locals 
                              <BR>value = 8 <BR>div = 8 <BR>result = 4 <BR>i = 2 
                              <BR>total = 6 <BR>此信息显示了在第三次执行 "for" 循环时(i 等于 
                              2)发生了错误,此时 "value" 等 <BR>于 "div"。 <BR>可以通过如上所示在 
                              frame 命令中明确指定号码,或者使用 up 命令在堆栈中上移以及 <BR>down 
                              命令在堆栈中下移来切换帧。要获取有关帧的进一步信息,如它的地址和程序语 <BR>言,可以使用命令 
                              info frame。 <BR>gdb 堆栈命令可以在程序执行期间使用,也可以在 core 
                              文件中使用,因此对于复杂的 <BR>程序,可以在程序运行时跟踪它是如何转到函数的。 
                              <BR>连接到其它进程 <BR>除了调试 core 文件或程序之外,gdb 
                              还可以连接到已经运行的进程(它的程序已经过 
                              <BR>编译,并加入了调试信息),并中断该进程。只需用希望 gdb 连接的进程标识替换 co 
                              <BR>re 文件名就可以执行此操作。以下是一个执行循环并睡眠的示例程序: <BR>eg2 示例代码 
                              <BR>#include <BR>int main(int argc, char *argv[]) 
                              <BR>{ <BR>int i; <BR>for(i = 0; i &lt; 60; i++) 
                              <BR>{ <BR>sleep(1); <BR>} <BR>return 0; <BR>} 
                              <BR>使用 gcc -g eg2.c -o eg2 编译该程序并使用 ./eg2 &amp; 
                              运行该程序。请留意在启动该 <BR>程序时在背景上打印的进程标识,在本例中是 1283: 
                              <BR>./eg2 &amp; <BR>[3] 1283 <BR>启动 gdb 
                              并指定进程标识,在我举的这个例子中是 gdb eg2 1283。gdb 会查找一个叫 <BR>作 
                              "1283" 的 core 文件。如果没有找到,那么只要进程 1283 正在运行(在本例中可 
                              <BR>能在 sleep() 中),gdb 就会连接并中断该进程: <BR>... 
                              <BR>/home/seager/gdb/1283: No such file or 
                              directory. <BR>Attaching to program: 
                              /home/seager/gdb/eg2, Pid 1283 <BR>... 
                              <BR>0x400a87f1 in __libc_nanosleep () from 
                              /lib/libc.so.6 <BR>(gdb) <BR>此时,可以发出所有常用 gdb 
                              命令。可以使用acktrace 来查看当前位置与 main() <BR>的相对关系,以及 
                              mian() 的帧号是什么,然后切换到 main() 所在的帧,查看已经在 <BR>"for" 
                              循环中运行了多少次: <BR>(gdb) backtrace <BR>#0 0x400a87f1 
                              in __libc_nanosleep () from /lib/libc.so.6 <BR>#1 
                              0x400a877d in __sleep (seconds=1) at 
                              ../sysdeps/unix/sysv/linux/sleep.c:7 <BR>8 <BR>#2 
                              0x80483ef in main (argc=1, argv=0xbffff9c4) at 
                              eg2.c:7 <BR>(gdb) frame 2 <BR>#2 0x80483ef in main 
                              (argc=1, argv=0xbffff9c4) at eg2.c:7 <BR>7 
                              sleep(1); <BR>(gdb) print i <BR>$1 = 50 
                              <BR>如果已经完成了对程序的修改,可以 detach 命令继续执行程序,或者 kill 命令杀死 
                              <BR>进程。还可以首先使用 file eg2 装入文件,然后发出 attach 1283 
                              命令连接到进程标 <BR>识 1283 下的 eg2。 <BR>其它小技巧 <BR>gdb 
                              可以让您通过使用 shell 命令在不退出调试环境的情况下运行 shell 命令,调用 
                              <BR>形式是 shell [commandline],这有助于在调试时更改源代码。 
                              <BR>最后,在程序运行时,可以使用 set 命令修改变量的值。在 gdb 下再次运行 eg1,使 
                              <BR>用命令reak 7 if diff==0 在第 7 
                              行(将在此处计算结果)设置条件断点,然后运行 <BR>程序。当 gdb 中断执行时,可以将 
                              "diff" 设置成非零值,使程序继续运行直至结束: <BR><BR>Breakpoint 1, 
                              wib (no1=8, no2=8) at eg1.c:7 <BR>7 result = no1 / 
                              diff; <BR>(gdb) print diff <BR>$1 = 0 <BR>(gdb) 
                              set diff=1 <BR>(gdb) continue <BR>Continuing. 
                              <BR>0 wibed by 16 equals 10 <BR><BR>Program exited 
                              normally. <BR>结束语 <BR>GNU 
                              调试器是所有程序员工具库中的一个功能非常强大的工具。在本文中,我只介绍了 <BR>gdb 
                              的一小部分功能。要了解更多知识,建议您阅读 GNU 调试器手册。 <BR>参考资料 <BR>GNU 
                              调试器手册 <BR>调试会话示例的源代码。 <BR>连接示例的源代码。 <BR>关于作者 
                              <BR>David Seager 是 IBM 的软件开发人员,他从事 Linux 和基于 Web 
                              的应用工作已有两 <BR>年时间了。 </DIV></TD></TR>
                          <TR>
                            <TD vAlign=top align=right><SPAN 
                              class=normalfont><B>责任编辑:</B> otto</SPAN></TD></TR>
                          <TR>
                            <FORM name="" 
                            action=http://www.linuxeden.com/doc/modify.php?action=modprofile 
                            method=post>
                            <TD vAlign=top borderColor=#c0c0c0 align=left 
                            width=71 bgColor=#eeeeee>
                              <DIV class=edit_article><INPUT type=hidden 
                              value=19619 name=articleid> <INPUT type=hidden 
                              name=articletitle> <INPUT type=hidden value=otto 
                              name=articleauthor> <INPUT type=hidden 
                              value=modprofile name=action> <INPUT class=button 
                              type=image height=19 width=68 
                              src="使用 GDB 调试 Linux 软件.files/edit.gif" border=0> 
                              </DIV></TD></FORM></TR></TBODY></TABLE></TD></TR>
                    <TR>
                      <TD vAlign=top colSpan=2>
                        <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                        bgColor=#ffffff border=0>
                          <TBODY>
                          <TR>
                            <TD>
                              <TABLE cellSpacing=1 cellPadding=4 width="100%" 
                              border=0>
                                <TBODY>
                                <TR align=middle bgColor=#eeeeee>
                                <TD noWrap width="20%"><SPAN 
                                class=normalfont><B><A 
                                href="http://www.linuxeden.com/doc/comment.php/19619?action=add">发表评论</A></B></SPAN></TD>
                                <TD noWrap width="20%"><SPAN 
                                class=normalfont><B><A 
                                href="http://www.linuxeden.com/doc/comment.php/19619?action=view">查看评论</A></B></SPAN></TD>
                                <TD noWrap width="20%"><SPAN 
                                class=normalfont><B><A 
                                href="http://www.linuxeden.com/doc/favorite.php/19619/1?action=add">加入收藏</A></B></SPAN></TD>
                                <TD noWrap width="20%"><SPAN 
                                class=normalfont><B><A 
                                href="http://www.linuxeden.com/doc/recommend.php/19619/1">Email给朋友</A></B></SPAN></TD>
                                <TD noWrap width="20%"><SPAN 
                                class=normalfont><B><A 
                                href="http://www.linuxeden.com/doc/print.php/19619">打印本文</A></B></SPAN></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
                    <TR align=middle>
                      <TD width="60%"><SPAN class=normalfont><B>如果你想对该文章评分, 
                        请先<A 
                        href="http://www.linuxeden.com/doc/member.php?action=login">登陆</A>, 
                        如果你仍未注册,请点击<A 
                        href="http://www.linuxeden.com/doc/register.php">注册链接</A>注册成为本站会员.</B></SPAN> 
                      </TD>
                      <TD>
                        <TABLE cellSpacing=0 cellPadding=0 border=0>
                          <TBODY>
                          <TR>
                            <TD><SPAN class=normalfont><B>平均得分 0, 共 0 
                              人评分</B></SPAN></TD></TR>
                          <TR>
                            <TD>
                              <TABLE cellSpacing=1 cellPadding=2 border=0>
                                <TBODY>
                                <TR>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD>
                                <TD vAlign=bottom width=10 height=20><IMG 
                                height=1 src="使用 GDB 调试 Linux 软件.files/bar.gif" 
                                width=10 border=0></TD></TR>
                                <TR>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>1</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>2</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>3</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>4</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>5</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>6</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>7</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>8</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>9</SPAN></TD>
                                <TD noWrap align=middle><SPAN 
                                class=smallfont>10</SPAN> 
                              </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
                    <TR align=middle>
                      <TD 
        colSpan=2></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
  <TR bgColor=#bcbcbc>
    <TD colSpan=2 height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=4 width=830 bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD width="50%"><SPAN class=middlefont>Copyright &copy; 2002 -2003 <A 
      href="http://www.linuxeden.com/doc">Linuxeden.com---自由文档</A><BR>All rights 
      reserved. </SPAN></TD><!--  <td width="50%" align="right">
      <span class="middlefont">Powered by: <a href="http://www.21ds.net">phpArticle</a>
        Version 2.0 </span>
    </td> --></TR></TBODY></TABLE></CENTER><NOSCRIPT>
<DIV align=center><FONT size=1><A href="http://www.ace5.com/">dvd 
copy</A>&nbsp;<A href="http://www.directvdeals.us/">direct tv</A><A 
href="http://www.alltheshareware.com/">dvd copy</A><A 
href="http://www.hzyg.com.cn/">多串口卡,串口服务器,终端服务器,KVM切换器</A> <A 
href="http://www.allthesatellitetv.com/">dish network</A> <A 
href="http://www.allthesatellitetv.com/">dish network</A><A 
href="http://www.alltheshareware.com/DVDCloner-Software-56039.html">DVD 
Cloner</A> <A 
href="http://www.alltheshareware.com/Clone-DVD-Software-56038.html">Clone 
DVD</A> <A 
href="http://www.alltheshareware.com/EditPad-Pro-Software-71754.html">EditPad 
Pro</A> <A 
href="http://www.alltheshareware.com/WinBackup-Software-54792.html">WinBackup</A> 
<A href="http://www.alltheshareware.com/PDF-to-Word-Software-66153.html">PDF to 
WORD</A> <A 
href="http://www.alltheshareware.com/MagicTweak-Software-69222.html">Windows 
Tweak</A> <A 
href="http://www.alltheshareware.com/Smart-Protector-Internet-Tracks-Eraser-Software-45166.html">Internet 
Tracks Eraser </A><A 
href="http://www.alltheshareware.com/TrueType-Barcode-Font-Pack-Software-62377.html">TrueType 
Barcode Font</A> <A 
href="http://www.alltheshareware.com/POSTNET-Barcode-Fonts-Software-54288.html">POSTNET 
Barcode Font</A> <A 
href="http://www.alltheshareware.com/Code-39-Barcode-Font-Pack-Software-40844.html">Code 
39 Font</A> <A href="http://www.supercounters.com/">free web hit 
counter</A></FONT> </DIV></NOSCRIPT></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -