﻿<?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>C++博客-一动不如一静-随笔分类-C++</title><link>http://www.cppblog.com/lijialian/category/1779.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 01:59:23 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 01:59:23 GMT</pubDate><ttl>60</ttl><item><title> 汇编语言入门</title><link>http://www.cppblog.com/lijialian/archive/2008/02/23/43130.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Sat, 23 Feb 2008 10:10:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2008/02/23/43130.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/43130.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2008/02/23/43130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/43130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/43130.html</trackback:ping><description><![CDATA[<p><a href="http://www.microsoft.com/msj/0298/hood0298.aspx">http://www.microsoft.com/msj/0298/hood0298.aspx</a></p>
<img src ="http://www.cppblog.com/lijialian/aggbug/43130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2008-02-23 18:10 <a href="http://www.cppblog.com/lijialian/archive/2008/02/23/43130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  如何根据crash地址找到对应的行号</title><link>http://www.cppblog.com/lijialian/archive/2007/05/03/23360.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Thu, 03 May 2007 02:44:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2007/05/03/23360.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/23360.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2007/05/03/23360.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/23360.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/23360.html</trackback:ping><description><![CDATA[<p>有时候我们的程序crash了，会出现一个crash界面提示我们在什么位置中断了。我们如何根据这个中断地址找到对应的行号呢？</p>
<p>要想达到这样的目的，首先要进行一些工程属性的配置。</p>
<p>c/c++-&gt;常规-&gt;调试信息格式-&gt;程序数据库<br>c/c++-&gt;优化-&gt;优化-&gt;禁用<br>链接器-&gt;调试-&gt;生成调试信息-&gt;是<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;生成映射文件-&gt;是<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;映射文件名称-&gt;$(OutDir)/$(ProjectName).map<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;映射导出-&gt;是<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;映射行-&gt;是</p>
<p>1&nbsp;&nbsp;&nbsp; int main (int argc, char* argv[])<br>2&nbsp;&nbsp; {<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char * p = 0;<br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *p = 'c';<br>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>6 }</p>
<p>当执行程序的时候，显示&#8220;test1.exe中的0x0040100e处未处理的异常：0xc000005:写入位置0x00000000时发生访问冲突&#8221;</p>
<p><br>这个时候来看一下map文件。首先看到的是参考的加载地址： Preferred load address is 00400000</p>
<p>Timestamp is 4639462c (Thu May 03 10:17:16 2007)</p>
<p style="color: red;">&nbsp;Preferred load address is 00400000</p>
<p>&nbsp;Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Length&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class<br>&nbsp;0001:00000000 00003b58H .text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CODE<br>&nbsp;0002:00000000 000000c4H .idata$5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:000000d0 00000c40H .rdata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d10 00000048H .rdata$debug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d60 00000008H .rdata$sxdata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d68 00000004H .rtc$IAA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d6c 00000004H .rtc$IZZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d70 00000004H .rtc$TAA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d74 00000004H .rtc$TZZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d78 00000014H .idata$2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000d8c 00000014H .idata$3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000da0 000000c4H .idata$4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:00000e64 00000366H .idata$6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0002:000011ca 00000000H .edata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000000 00000004H .CRT$XCA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000004 00000004H .CRT$XCAA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000008 00000004H .CRT$XCZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:0000000c 00000004H .CRT$XIA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000010 00000008H .CRT$XIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000018 00000004H .CRT$XIZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:0000001c 00000004H .CRT$XPA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000020 00000004H .CRT$XPZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000024 00000004H .CRT$XTA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000028 00000004H .CRT$XTZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:00000030 00000274H .data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA<br>&nbsp;0003:000002c0 00000598H .bss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA</p>
<p>crash地址计算：calculation: crash_address - preferred_load_address - 0x1000<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0040100e -0x00400000-0x1000=0x0000000e</p>
<p>接着在map中查找对应的obj</p>
<p>&nbsp;Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Publics by Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rva+Base&nbsp;&nbsp;&nbsp;&nbsp; Lib:Object<br><br>&nbsp;0000:00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __except_list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000000&nbsp;&nbsp;&nbsp;&nbsp; &lt;absolute&gt;<br>&nbsp;0000:00000002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ___safe_se_handler_count&nbsp;&nbsp; 00000002&nbsp;&nbsp;&nbsp;&nbsp; &lt;absolute&gt;<br><span style="color: red;">&nbsp;0001:00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00401000 f&nbsp;&nbsp; test1.obj</span><br>&nbsp;0001:00000017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __amsg_exit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00401017 f&nbsp;&nbsp; LIBC:crt0.obj<br>&nbsp;0001:0000003c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _mainCRTStartup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0040103c f&nbsp;&nbsp; LIBC:crt0.obj<br>&nbsp;0001:00000203&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ___crtExitProcess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00401203 f&nbsp;&nbsp; LIBC:crt0dat.obj</p>
<br>
<p>最后根据obj和计算的值在map中找第一个小于我们所计算的值的位置</p>
<p>Line numbers for .\release\test1.obj(d:\test\test1\test1\test1.cpp) segment .text<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 2 0001:00000000&nbsp;&nbsp;&nbsp;&nbsp; 3 0001:00000004&nbsp;&nbsp;&nbsp;&nbsp; 4 0001:0000000b&nbsp;&nbsp;&nbsp;&nbsp; 5 0001:00000011<br></p>
<p>然后在.map中查找第一个小于我们所计算的值的位置</p>
<p>所以我们的中断位置是在第4行<br></p><img src ="http://www.cppblog.com/lijialian/aggbug/23360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2007-05-03 10:44 <a href="http://www.cppblog.com/lijialian/archive/2007/05/03/23360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用windug分析dump文件(还原堆栈信息)</title><link>http://www.cppblog.com/lijialian/archive/2007/03/07/19389.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Wed, 07 Mar 2007 15:17:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2007/03/07/19389.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/19389.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2007/03/07/19389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/19389.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/19389.html</trackback:ping><description><![CDATA[<p>首先用~*kb,察看所有的线程<br>然后寻找Filter关键字所在的线程,假设出问题的线程为12,.<br><br>首先将线程2设置为当前线程： ~2s<br>因为XcpFilter的结构体中，第2个参数表示异常信息的指针，第3个参数是上下文的指针。<br>假设args to child <br>&nbsp;&nbsp;&nbsp; 0x0001 0xb5f78 0x45235</p>
<p>执行.exr 0xb5f78 <br>执行.cxr 0x45235</p>
<p>执行.kb就可以还原堆栈信息了<br><br></p>
<img src ="http://www.cppblog.com/lijialian/aggbug/19389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2007-03-07 23:17 <a href="http://www.cppblog.com/lijialian/archive/2007/03/07/19389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>window上如何设置才能获取dump文件</title><link>http://www.cppblog.com/lijialian/archive/2006/12/10/16214.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Sun, 10 Dec 2006 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2006/12/10/16214.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/16214.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2006/12/10/16214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/16214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/16214.html</trackback:ping><description><![CDATA[近来在工作中总是会有一些dump文件需要分析，但是自己对windug十分陌生。所以就想自己产生几个coredump文件，然后学习着用windug进行分析。虽然有了这个想法，但是不知道怎么才能在windows上产生coredump文件。于是抱着试试的想法，搜索了一下，结果还真让我给搜到了。<br />在以下的这个网址讲述了如何在xp和2000上如何设置？<br />http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/index.jsp?topic=/com.ibm.support.was40.doc/html/Crash/swg21113013.html<br /><br />现在我呢，就做了搬运工，搬到这里^_^。<br /><br /><table border="0" cellpadding="0" cellspacing="0" width="443"><tbody><tr><td width="443"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr valign="top"><td width="438"><table border="0" cellpadding="0" cellspacing="0" width="443"><tbody><tr><td height="20" valign="bottom" width="443"><b>Solution</b></td></tr><tr><td width="443"><ol type="1"><li>Open a command prompt window.
<br /><br /></li><li>Enter the command <b>drwtsn32.exe</b>.
<br /><br />
The following window will display: 
<ul><li type="disc"><b>For Windows 2000:
<br /></b><br /><img src="http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/topic/com.ibm.support.was40.doc/images/support/docview.wss/swg21113013_1.gif" alt="" height="458" width="332" /><br /><br /></li><li type="disc"><b>For Windows XP:
<br /></b><br /><img src="http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/topic/com.ibm.support.was40.doc/images/support/docview.wss/swg21113013_2.gif" alt="" height="492" width="332" /><br /><br /></li></ul></li><li>In the <b>Log File Path</b> field, type the location to where you want
the <tt>DrWatson</tt> log to be stored.
<br /><br /></li><li>In the <b>Crash Dump</b> field, type the file name and location where
you want the <tt>user.dmp</tt> file to be stored.
<br /><br /></li><li>Make sure that the following options are selected: 
<ol type="a"><li><b>Dump Symbol Table</b></li><li><b>Dump All Thread Contents</b></li><li><b>Visual Notification</b></li><li><b>Create Crash Dump File
<br /></b><br /></li></ol></li><li>If you are running Windows XP, set <b>Crash Dump Type</b> to <b>NT4
Full Compatible</b>.
<br /><br /></li><li>From a command prompt, enter <b>drwtsn32 -i</b> to re-enable Dr.
Watson as your default Windows debugger. This will make the necessary
changes in the Windows registry.</li></ol></td></tr><tr><td> </td></tr></tbody></table></td></tr><tr valign="top"><td width="438"><br /></td></tr><tr><td><br /></td></tr></tbody></table></td><td> </td></tr></tbody></table><br /><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/lijialian/aggbug/16214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2006-12-10 12:52 <a href="http://www.cppblog.com/lijialian/archive/2006/12/10/16214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些常用的定位问题的方法</title><link>http://www.cppblog.com/lijialian/archive/2006/12/09/16180.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Sat, 09 Dec 2006 12:04:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2006/12/09/16180.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/16180.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2006/12/09/16180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/16180.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/16180.html</trackback:ping><description><![CDATA[１．定位进程到底是挂在哪里<br />　　psstack 进程ID &gt; 文件名称<br />        cat 文件名称 | c++filt &gt; 其他的文件　　　<br />2.   snoopy抓包<br />     a.先用ifconfig查出设备名称，假设为bge0<br />    b. snoop -d bge0 -o 文件文成　目的机器的IP地址<br />    c.snoopy from ip地址　to ip地址<br />　　<br />   3.抓ｄｕｍｐ包之后用windug分析。这里的学问就大了。目前正在学习中<br /><img src ="http://www.cppblog.com/lijialian/aggbug/16180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2006-12-09 20:04 <a href="http://www.cppblog.com/lijialian/archive/2006/12/09/16180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>const的用法</title><link>http://www.cppblog.com/lijialian/archive/2006/06/14/8557.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Wed, 14 Jun 2006 09:49:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2006/06/14/8557.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/8557.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2006/06/14/8557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/8557.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/8557.html</trackback:ping><description><![CDATA[1.修饰类的数据成员<br />const数据成员只是在某个对象的生命周期内是常量.如果创建多个对象,那么每个对象的const数据成员可以不一样.所以,不能在类声明中初始化const数据成员.如:<br />class A<br />{<br />   const int size = 100;// 错误<br />   int array[size];//错误,未知的数组大小<br />}<br />const类数据成员,只能在类的构造函数的初始化列表中进行.要想建立整个类都是恒定的常量的数据,可以用类中的枚举.如:<br />class A<br />{<br />enum {size1 = 100, size2 = 200};<br />int array[size1];<br />}<br /><br />2.只有声明为const的成员函数才能被一个const对象调用<br /><br />3.在另一连接文件中引用const常量.<br />extern const int i<br /><br />4.对于const对象,c++既允许对其进行静态初始化,也允许对其进行动态初始化.const对象具有从构造函数完成到析构函数执行之前的不变性.<br /><br />5.常量与数组的组合有什么特殊吗？<br />我们给出下面的代码：<br />const int size[3]={10,20,50};<br />int array[size[2]];<br />编译通不过！为什么呢？const可以用于集合，但编译器不能把一个集合存放在它的符号表里，所以必须分配内存。在这种情况下，const意味着“不能改变的一块存储”。然而，其值在编译时不能被使用，因为编译器在编译时不需要知道存储的内容。自然，作为数组的大小就不行了<br />你再看看下面的例子：<br />class A<br />{<br />public:<br />A(int i=0):test[2]({1,2}) {} file://你/认为行吗？<br />private:<br />const int test[2];<br />}；<br />C++标准有一个规定，不允许无序对象在类内部初始化，数组显然是一个无序的，所以这样的初始化是错误的！对于他，只能在类的外部进行初始化，如果想让它通过，只需要声明为静态的，然后初始化。<br />这里我们看到，常量与数组的组合没有什么特殊！一切都是数组惹的祸！<br /><br />（7）什么情况下为const分配内存？<br />以下是我想到的可能情况，当然，有的编译器进行了优化，可能不分配内存。<br />A、作为非静态的类成员时；<br />B、用于集合时；<br />C、被取地址时；<br />D、在main函数体内部通过函数来获得值时；<br />E、const的 class或struct有用户定义的构造函数、析构函数或基类时；。<br />F、当const的长度比计算机字长还长时；<br />G、参数中的const；<br />H、使用了extern时。<br /><br />（8）与static搭配会不会有问题？<br />假设有一个类：<br />class A<br />{<br />public:<br />......<br />static void f() const { ......}<br />......<br />};<br />我们发现编译器会报错，因为在这种情况下static不能够与const共存！因为static没有this指针，但是const修饰this指针.<br /><br />（9）如何修改常量？<br />有时候我们却不得不对类内的数据进行修改，但是我们的接口却被声明了const，那该怎么处理呢？我对这个问题的看法如下：<br />1）标准用法：mutable<br />class A<br />{<br />public:<br />A(int i=0):test(i) { }<br />void Setvalue(int i)const { test=i; }<br />private:<br />mutable int test; file://这/里处理！<br />}；<br />2）强制转换：const_cast<br />class A<br />{<br />public:<br />A(int i=0):test(i) { }<br />void Setvalue(int i)const<br />{ const_cast &lt;int&gt;(test)=i; }//这里处理！<br />private:<br />int test; <br />}；<br /><br />（10）最后我们来讨论一下常量对象的动态创建。<br />既然编译器可以动态初始化常量，就自然可以动态创建，例如：<br />const int* pi=new const int(10);<br />这里要注意2点：<br />1）const对象必须被初始化！所以(10)是不能够少的。<br />2）new返回的指针必须是const类型的。<br />那么我们可不可以动态创建一个数组呢？<br />答案是否定的，因为new内置类型的数组，不能被初始化。<img src ="http://www.cppblog.com/lijialian/aggbug/8557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2006-06-14 17:49 <a href="http://www.cppblog.com/lijialian/archive/2006/06/14/8557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++中的引用类型</title><link>http://www.cppblog.com/lijialian/archive/2006/06/14/8548.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Wed, 14 Jun 2006 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2006/06/14/8548.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/8548.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2006/06/14/8548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/8548.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/8548.html</trackback:ping><description><![CDATA[c++中的引用又称为别名.<br /><br />1. 引用必须被初始化,即必须指向一个对象.<br /> int nTemp = 10;<br />int &amp;refTemp = nTemp;<br /><br />2.初始化之后就不能再指向其他对象.如果用一个引用给另一个引用赋值,那么被改变的是被引用的对象而不是引用本身.<br />int nOther = 20;<br />refTemp = nOther; //此时nTemp中的值为20,但是&amp;refTemp和&amp;nTemp是相同的.<br /><br />3.用const修饰的引用可以用不同类型的对象初始化(只要能从一种类型转换到另外一种类型),也可以是不可寻址的值.能够这样的原因是因为:编译器做了手脚.<br />double dTemp = 1024;<br />const int &amp;refTemp = dTemp; //&amp;dTemp和&amp;refTemp是不同的.<br /><br />编译之后成为:<br />double dTemp = 1024;<br />int nTemp = dTemp;<br />const int &amp;refTemp = nTemp; <br /><br />4.不允许非const引用指向需要临时对象的对象或值.<br /><br /><br /><img src ="http://www.cppblog.com/lijialian/aggbug/8548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2006-06-14 15:55 <a href="http://www.cppblog.com/lijialian/archive/2006/06/14/8548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接收来自键盘输入的行数据</title><link>http://www.cppblog.com/lijialian/archive/2006/06/13/8487.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Tue, 13 Jun 2006 02:01:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2006/06/13/8487.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/8487.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2006/06/13/8487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/8487.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/8487.html</trackback:ping><description><![CDATA[
		<p>         #include &lt;iostream&gt;<br />         #include &lt;string&gt;</p>
		<p>         std::cin.widen(1024);</p>
		<p>         for (; ;)<br />         {<br />               std::string user_input;<br />               std::getline(std::cin, user_input, '\n');<br />               <br />               if  (!std::cin || std::cin.eof()) break;<br />              <br />               std::cerr &lt;&lt; user_input;<br />          <br />         }</p>
<img src ="http://www.cppblog.com/lijialian/aggbug/8487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2006-06-13 10:01 <a href="http://www.cppblog.com/lijialian/archive/2006/06/13/8487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>error LNK2001</title><link>http://www.cppblog.com/lijialian/archive/2006/06/11/8434.html</link><dc:creator>一动不如一静</dc:creator><author>一动不如一静</author><pubDate>Sun, 11 Jun 2006 15:06:00 GMT</pubDate><guid>http://www.cppblog.com/lijialian/archive/2006/06/11/8434.html</guid><wfw:comment>http://www.cppblog.com/lijialian/comments/8434.html</wfw:comment><comments>http://www.cppblog.com/lijialian/archive/2006/06/11/8434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijialian/comments/commentRss/8434.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijialian/services/trackbacks/8434.html</trackback:ping><description><![CDATA[
		<p>在类中声明成员方法的时候,只有纯虚函数才可以不用实现.<br />虚函数必须实现,否则会出现error LNK2001的错误.</p>
<img src ="http://www.cppblog.com/lijialian/aggbug/8434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijialian/" target="_blank">一动不如一静</a> 2006-06-11 23:06 <a href="http://www.cppblog.com/lijialian/archive/2006/06/11/8434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>