<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[个人原创]Linux用GDB调试时如何打印数组，结构体的全值打印及其修改或加入变量调试。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Thu, 01 Sep 2011 04:58:45 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	一.调试打印C程序中的数组的方法<br/><textarea name="code" class="html" rows="15" cols="100">
(gdb) l 23
Line number 18 out of range; array.c has 17 lines.
发现共才17行，于是用下面命令：
(gdb) l 1,17
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h&gt;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdlib.h&gt;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main()
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len=5;
7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *array;
8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array = (int *) malloc (len * sizeof (int));
9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;len;i++)
10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;
11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//scanf(&quot;%d&quot;,array+i);
12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(array+i) = i;
13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;The Result Value is :&#92;n&quot;);
15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;len;i++)
16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%d&#92;n&quot;,*(array++));
17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

(gdb) b 14
Breakpoint 1 at 0x8048452: file array.c, line 14.
(gdb) r
Starting program: /home/admin/c++/array

Breakpoint 1, main () at array.c:14
14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;The Result Value is :&#92;n&quot;);
(gdb) p *array@5
$1 = &#123;0, 1, 2, 3, 4&#125;
</textarea><br/>二.打印C程序中的结构体的方法<br/><textarea name="code" class="html" rows="15" cols="100">
root@116.255.139.240:/home/admin/c++# cat struct.c
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
typedef struct cfg
&#123;
 int type;
 char name[12];
&#125; man;
int main()
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;man oneperson;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oneperson.type = 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char name[12]=&quot;jack&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(oneperson.name,name);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;jackxiang&#92;n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;jackxiang&#92;n&quot;);
&#125;
</textarea><br/><br/>打印整个结构体：<br/><textarea name="code" class="html" rows="15" cols="100">
(gdb) p oneperson
$1 = &#123;type = 1, name = &quot;jack&#92;000&#92;217&#92;306&#92;000&#92;220&#92;065&#92;260&quot;&#125;
</textarea><br/><br/>打结构体中的某个值：<br/><textarea name="code" class="html" rows="15" cols="100">
(gdb) p oneperson-&gt;type
$2 = 1
(gdb) p oneperson-&gt;name
$3 = &quot;jack&#92;000&#92;217&#92;306&#92;000&#92;220&#92;065&#92;260&quot;
(gdb) p oneperson
$1 = &#123;type = 1, name = &quot;jack&#92;000&#92;217&#92;306&#92;000&#92;220&#92;065&#92;260&quot;&#125;
</textarea><br/><br/>如果打开printf pretty这个选项，那么当GDB显示结构体时会比较漂亮。如： <br/><textarea name="code" class="html" rows="15" cols="100">
(gdb) set print pretty on
(gdb) print oneperson
$1 = &#123;
&nbsp;&nbsp;type = 1,
&nbsp;&nbsp;name = &quot;jack&#92;000&#92;217&#92;306&#92;000&#92;220&#92;065&#92;260&quot;
&#125;
[codes=html]

三.在GDB中加入变量调试For循环中的数组的方法：
[codes=html]
(gdb) p oneperson.name
$2 = &quot;jack&#92;000&#92;217&#92;306&#92;000&#92;220&#92;065&#92;260&quot;
(gdb) p oneperson-&gt;name
$3 = &quot;jack&#92;000&#92;217&#92;306&#92;000&#92;220&#92;065&#92;260&quot;

(gdb) l
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h&gt;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int w[4] = &#123;12,5,8,29&#125;;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main()
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[2] = 88;
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;
(gdb) b 6
Breakpoint 1 at 0x804838c: file set.c, line 6.
(gdb) r
Starting program: /home/admin/c++/set

Breakpoint 1, main () at set.c:6
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;
(gdb) set $i = 0
(gdb) p w[$i]
$1 = 12
(gdb) p w[$i++]
$2 = 12
(gdb) p w[$i]
$3 = 5
(gdb) p w[$i++]
$4 = 5
(gdb) p w[$i]
$5 = 88
</textarea><br/>四.修改变量的值<br/><textarea name="code" class="html" rows="15" cols="100">
(gdb) p w[2]
$6 = 88
(gdb) p w[2]=99
$7 = 99
(gdb) p w[2]
$8 = 99
</textarea><br/><br/>他人实践：http://wenku.baidu.com/view/77cbd54f767f5acfa1c7cdda.html<br/>GDB个人总结下载：<br/><a href="attachment.php?fid=201">点击这里下载文件</a><br/><br/>参看：http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&amp;variant=zh-cn<br/>本站参考：<br/>http://jackxiang.com/post/4014/<br/>http://jackxiang.com/post/757/<br/><br/>使用 GDB 调试多进程程序：<br/>http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/<br/>http://tieba.baidu.com/f?kz=874502809<br/>http://blog.163.com/redhumor@126/blog/static/1955478420108192540752/
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [个人原创]Linux用GDB调试时如何打印数组，结构体的全值打印及其修改或加入变量调试。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>