﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-willpower88-随笔分类-Linux C</title><link>http://www.blogjava.net/willpower88/category/30902.html</link><description>对JAVA有点理解了……</description><language>zh-cn</language><lastBuildDate>Wed, 04 Jul 2012 21:03:39 GMT</lastBuildDate><pubDate>Wed, 04 Jul 2012 21:03:39 GMT</pubDate><ttl>60</ttl><item><title> undefined reference to问题</title><link>http://www.blogjava.net/willpower88/archive/2012/07/04/382213.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 04 Jul 2012 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2012/07/04/382213.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/382213.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2012/07/04/382213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/382213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/382213.html</trackback:ping><description><![CDATA[<div><p>引自：http://blog.csdn.net/lyuan13141234/article/details/5667570<br /></p><p>在linux下，编译链接的时候，经常会遇到这样一个问题，undefined reference to.....，引起这个问题的原因在于在链接的时候缺少选项。下面举几个例子，并给出解决办法。</p> <p>1、undefined reference to `dlerror'<br />&nbsp;&nbsp;&nbsp; &nbsp;undefined reference to `dlopen'<br />&nbsp;&nbsp;&nbsp; &nbsp;undefined reference to `dlerror'</p> <p>&nbsp;&nbsp;&nbsp; 解决办法：在makefile的LDFLAGS后面把选项 -ldl 添加上即可。</p> <p>2、undefined reference to `main'</p> <p>&nbsp;&nbsp; &nbsp;解决办法：在makefile的LDFLAGS后面添加 -nostartfiles 选项。</p> <p>3、undefined reference to `pthread_setspecific'<br />&nbsp;&nbsp;&nbsp;&nbsp; undefined reference to `pthread_key_delete'<br />&nbsp;&nbsp;&nbsp;&nbsp; undefined reference to `pthread_key_create'</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;解决办法：在makefile的LDFLAGS后面添加&nbsp;-lpthread 选项。</p> <p>4、undefined reference to `clock_gettime'</p> <p>&nbsp;&nbsp;&nbsp; 解决办法：在makefile的LDFLAGS后面添加&nbsp;-lrt 选项。</p> <p>&nbsp;</p> <p>不过要注意的是，如果undefined reference to后面的内容是在自己的文件中声明或定义的东西，就不能用这种方法来解决了。这时就需要检查一下自己的makefile涉及到源文件、头文件的地方是否出错了，也有可能是其他的原因。</p></div><img src ="http://www.blogjava.net/willpower88/aggbug/382213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2012-07-04 17:29 <a href="http://www.blogjava.net/willpower88/archive/2012/07/04/382213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>error while loading shared libraries的解決方法 </title><link>http://www.blogjava.net/willpower88/archive/2011/09/13/358555.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Tue, 13 Sep 2011 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2011/09/13/358555.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/358555.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2011/09/13/358555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/358555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/358555.html</trackback:ping><description><![CDATA[查看系统环境是否设置了&#8220;LD_LIBRARY_PATH&#8221;<br />办法一：<br /><div>如没有设置，就将你的so路径设置为LD_LIBRARY_PATH：</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">export&nbsp;LD_LIBRARY_PATH</span><span style="color: #000000; ">=</span><span style="color: #800000; ">"</span><span style="color: #800000; ">your&nbsp;so&nbsp;path</span><span style="color: #800000; ">"</span></div>或将上面命令添加到~/.bashrc里，执行：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">source&nbsp;</span><span style="color: #000000; ">~/</span><span style="color: #000000; ">.bashrc</span></div><br /><div>办法二：</div><div>如没设置，将你的so拷至LD_LIBRARY_PATH路径下并执行：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">/</span><span style="color: #000000; ">sbin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ldconfig&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">v</span></div></div>通过以上两种办法之一就能解决此问题，当然还可以修改/etc/ld.so.conf，但需要root权限，总之办法不止这两种，大家灵活应用吧。<br /><br /><img src ="http://www.blogjava.net/willpower88/aggbug/358555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2011-09-13 18:12 <a href="http://www.blogjava.net/willpower88/archive/2011/09/13/358555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gcc-</title><link>http://www.blogjava.net/willpower88/archive/2010/11/03/336919.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Wed, 03 Nov 2010 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/11/03/336919.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/336919.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/11/03/336919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/336919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/336919.html</trackback:ping><description><![CDATA[gcc test_get_ad.c&nbsp; -o test_get_ad&nbsp; -ldl 
<img src ="http://www.blogjava.net/willpower88/aggbug/336919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-11-03 13:06 <a href="http://www.blogjava.net/willpower88/archive/2010/11/03/336919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux C 编程之vi篇</title><link>http://www.blogjava.net/willpower88/archive/2010/05/21/321561.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 21 May 2010 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2010/05/21/321561.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/321561.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2010/05/21/321561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/321561.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/321561.html</trackback:ping><description><![CDATA[<br />
1、查看库函数原型：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在命令模式下，光标停在要看的函数上 ctrl+w i<br />
2、查看库函数帮助：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在命令模式下，光标停在要看的函数上 shift+k(K)
<img src ="http://www.blogjava.net/willpower88/aggbug/321561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2010-05-21 17:44 <a href="http://www.blogjava.net/willpower88/archive/2010/05/21/321561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下的调试程序GDB</title><link>http://www.blogjava.net/willpower88/archive/2008/04/18/194050.html</link><dc:creator>一凡</dc:creator><author>一凡</author><pubDate>Fri, 18 Apr 2008 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/willpower88/archive/2008/04/18/194050.html</guid><wfw:comment>http://www.blogjava.net/willpower88/comments/194050.html</wfw:comment><comments>http://www.blogjava.net/willpower88/archive/2008/04/18/194050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/willpower88/comments/commentRss/194050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/willpower88/services/trackbacks/194050.html</trackback:ping><description><![CDATA[Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能:<br />
<font face="Courier New">1、启动你的程序，可以按照你的自定义的要求随心所欲的运行程序。<br />
2、可让被调试的程序在你所指定的调置的断点处停住。（断点可以是条件表达式）<br />
3、当程序被停住时，可以检查此时你的程序中所发生的事。<br />
4、动态的改变你程序的执行环境。<br />
</font>当你启动 <tt>gdb</tt> 后, 你能在命令行上指定很多的选项. 可以以下面的方式来运行 <tt>gdb</tt> gdb &lt;fname&gt;<br />
当你用这种方式运行 <tt>gdb</tt> , 你能直接指定想要调试的程序. 这将告诉<tt>gdb</tt> 装入名为 fname 的可执行文件. 你也可以用 <tt>gdb</tt> 去检查一个因程序异常终止而产生的 core 文件, 或者与一个正在运行的程序相连. 你可以参考 <tt>gdb</tt> 指南页或在命令行上键入 <tt>gdb -h</tt> 得到一个有关这些选项的说明的简单列表. &nbsp; <span style="font-weight: bold;"><br />
</span>为调试编译代码<br />
为了使 <tt>gdb</tt> 正常工作, 你必须使你的程序在编译时包含调试信息. 调试信息包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号.&nbsp; <tt>gdb</tt> 利用这些信息使源代码和机器码相关联.<br />
在编译时用 -g 选项打开调试选项.<br />
<br />
<br />
<table border="1">
    <tbody>
        <tr rowspan="1" align="left">
            <td align="center"><em>命&nbsp;&nbsp; 令</em></td>
            <td align="center"><em>描&nbsp; 述</em></td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>file</tt></td>
            <td align="center">装入想要调试的可执行文件.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>kill</tt></td>
            <td align="center">终止正在调试的程序.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>list</tt></td>
            <td align="center">列出产生执行文件的源代码的一部分.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>next</tt></td>
            <td align="center">执行一行源代码但不进入函数内部.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>step</tt></td>
            <td align="center">执行一行源代码而且进入函数内部.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>run</tt></td>
            <td align="center">执行当前被调试的程序</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>quit</tt></td>
            <td align="center">终止 <tt>gdb</tt></td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>watch</tt></td>
            <td align="center">使你能监视一个变量的值而不管它何时被改变.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>break</tt></td>
            <td align="center">在代码里设置断点, 这将使程序执行到这里时被挂起.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>make</tt></td>
            <td align="center">使你能不退出 <tt>gdb</tt> 就可以重新产生可执行文件.</td>
        </tr>
        <tr rowspan="1" align="left">
            <td align="center"><tt>shell</tt></td>
            <td align="center">使你能不离开 <tt>gdb</tt> 就执行 UNIX shell 命令.&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
(a)设置断点<br />
break 20;---在第20行设置断点<br />
break func;---在函数func的入口处设置断点<br />
(b)取消断点<br />
delete break 20;---取消第20行的断点<br />
delete break func;---取消函数func入口处的断点<br />
(c)运行代码<br />
run;<br />
r;<br />
(d)显示变量或函数值<br />
display;<br />
p;<br />
(e)单步执行<br />
next;<br />
n;<br />
(f)跳步执行<br />
step;<br />
s;<br />
(g)循环执行<br />
continue;<br />
c;<br />
(h)列出运行栈内容<br />
bt;<font face="Courier New"><strong><br />
一个调试示例<br />
——————</strong></font>
<p><font face="Courier New">源程序：tst.c</font></p>
<p><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp; 1 #include &lt;stdio.h&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 2<br />
&nbsp;&nbsp;&nbsp;&nbsp; 3 int func(int n)<br />
&nbsp;&nbsp;&nbsp;&nbsp; 4 {<br />
&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sum=0,i;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0; i&lt;n; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum+=i;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sum;<br />
&nbsp;&nbsp;&nbsp; 11 }<br />
&nbsp;&nbsp;&nbsp; 12<br />
&nbsp;&nbsp;&nbsp; 13<br />
&nbsp;&nbsp;&nbsp; 14 main()<br />
&nbsp;&nbsp;&nbsp; 15 {<br />
&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />
&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long result = 0;<br />
&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=100; i++)<br />
&nbsp;&nbsp;&nbsp; 19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += i;<br />
&nbsp;&nbsp;&nbsp; 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; 22<br />
&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("result[1-100] = %d \n", result );<br />
&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("result[1-250] = %d \n", func(250) );<br />
&nbsp;&nbsp;&nbsp; 25 }</font></p>
<p><font face="Courier New">编译生成执行文件：（Linux下）<br />
cc -g tst.c -o tst</font></p>
<p><font face="Courier New">使用GDB调试：</font></p>
<p><font face="Courier New">gdb tst&nbsp; &lt;---------- 启动GDB<br />
GNU gdb 5.1.1<br />
Copyright 2002 Free Software Foundation, Inc.<br />
GDB is free software, covered by the GNU General Public License, and you are<br />
welcome to change it and/or distribute copies of it under certain conditions.<br />
Type "show copying" to see the conditions.<br />
There is absolutely no warranty for GDB.&nbsp; Type "show warranty" for details.<br />
This GDB was configured as "i386-<a href="http://www.linuxidc.com/topicnews.aspx?tid=3" title="SuSE">SuSE</a>-linux"...<br />
(gdb) l&nbsp;&nbsp;&nbsp;&nbsp; &lt;-------------------- l命令相当于list，从第一行开始例出原码。<br />
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h&gt;<br />
2<br />
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int func(int n)<br />
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sum=0,i;<br />
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0; i&lt;n; i++)<br />
7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum+=i;<br />
9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sum;<br />
(gdb)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-------------------- 直接回车表示，重复上一次命令<br />
11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
12<br />
13<br />
14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main()<br />
15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;<br />
17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long result = 0;<br />
18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=100; i++)<br />
19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += i;&nbsp;&nbsp;&nbsp;<br />
(gdb) break 16&nbsp;&nbsp;&nbsp; &lt;-------------------- 设置断点，在源程序第16行处。<br />
Breakpoint 1 at 0x8048496: file tst.c, line 16.<br />
(gdb) break func&nbsp; &lt;-------------------- 设置断点，在函数func()入口处。<br />
Breakpoint 2 at 0x8048456: file tst.c, line 5.<br />
(gdb) info break&nbsp; &lt;-------------------- 查看断点信息。<br />
Num Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disp Enb Address&nbsp;&nbsp;&nbsp; What<br />
1&nbsp;&nbsp; breakpoint&nbsp;&nbsp;&nbsp;&nbsp; keep y&nbsp;&nbsp; 0x08048496 in main at tst.c:16<br />
2&nbsp;&nbsp; breakpoint&nbsp;&nbsp;&nbsp;&nbsp; keep y&nbsp;&nbsp; 0x08048456 in func at tst.c:5<br />
(gdb) r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 运行程序，run命令简写<br />
Starting program: /home/hchen/test/tst</font></p>
<p><font face="Courier New">Breakpoint 1, main () at tst.c:17&nbsp;&nbsp;&nbsp; &lt;---------- 在断点处停住。<br />
17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long result = 0;<br />
(gdb) n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 单条语句执行，next命令简写。<br />
18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=100; i++)<br />
(gdb) n<br />
20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += i;<br />
(gdb) n<br />
18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=100; i++)<br />
(gdb) n<br />
20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += i;<br />
(gdb) c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 继续运行程序，continue命令简写。<br />
Continuing.<br />
result[1-100] = 5050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;----------程序输出。</font></p>
<p><font face="Courier New">Breakpoint 2, func (n=250) at tst.c:5<br />
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sum=0,i;<br />
(gdb) n<br />
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=n; i++)<br />
(gdb) p i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 打印变量i的值，print命令简写。<br />
$1 = 134513808<br />
(gdb) n<br />
8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum+=i;<br />
(gdb) n<br />
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=n; i++)<br />
(gdb) p sum<br />
$2 = 1<br />
(gdb) n<br />
8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum+=i;<br />
(gdb) p i<br />
$3 = 2<br />
(gdb) n<br />
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1; i&lt;=n; i++)<br />
(gdb) p sum<br />
$4 = 3<br />
(gdb) bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 查看函数堆栈。<br />
#0&nbsp; func (n=250) at tst.c:5<br />
#1&nbsp; 0x080484e4 in main () at tst.c:24<br />
#2&nbsp; 0x400409ed in __libc_start_main () from /lib/libc.so.6<br />
(gdb) finish&nbsp;&nbsp;&nbsp; &lt;--------------------- 退出函数。<br />
Run till exit from #0&nbsp; func (n=250) at tst.c:5<br />
0x080484e4 in main () at tst.c:24<br />
24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("result[1-250] = %d \n", func(250) );<br />
Value returned is $6 = 31375<br />
(gdb) c&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 继续运行。<br />
Continuing.<br />
result[1-250] = 31375&nbsp;&nbsp;&nbsp; &lt;----------程序输出。</font></p>
<p><font face="Courier New">Program exited with code 027. &lt;--------程序退出，调试结束。<br />
(gdb) q&nbsp;&nbsp;&nbsp;&nbsp; &lt;--------------------- 退出gdb。</font></p>
<img src ="http://www.blogjava.net/willpower88/aggbug/194050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/willpower88/" target="_blank">一凡</a> 2008-04-18 15:51 <a href="http://www.blogjava.net/willpower88/archive/2008/04/18/194050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>