﻿<?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++博客-to myself 的分类学习日志-随笔分类-tools</title><link>http://www.cppblog.com/toMyself/category/9709.html</link><description>做自己想做的事</description><language>zh-cn</language><lastBuildDate>Fri, 13 Dec 2013 14:15:55 GMT</lastBuildDate><pubDate>Fri, 13 Dec 2013 14:15:55 GMT</pubDate><ttl>60</ttl><item><title>常用工具命令</title><link>http://www.cppblog.com/toMyself/archive/2011/11/08/159823.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 08 Nov 2011 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2011/11/08/159823.html</guid><wfw:comment>http://www.cppblog.com/toMyself/comments/159823.html</wfw:comment><comments>http://www.cppblog.com/toMyself/archive/2011/11/08/159823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/toMyself/comments/commentRss/159823.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/toMyself/services/trackbacks/159823.html</trackback:ping><description><![CDATA[抓包<br />tcpdump -i eth1 -w platgate.pcap tcp port 6001 and dst 192.168.5.232<br />Wireshark<br />smsniff<br />Ethereal<br /><br /><img src ="http://www.cppblog.com/toMyself/aggbug/159823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2011-11-08 15:23 <a href="http://www.cppblog.com/toMyself/archive/2011/11/08/159823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse</title><link>http://www.cppblog.com/toMyself/archive/2011/01/26/139338.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Wed, 26 Jan 2011 04:50:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2011/01/26/139338.html</guid><description><![CDATA[The Eclipse C/C++ Development Tools (CDT) runs on top of the Eclipse Platform. The CDT provides advanced functionality for C/C++ developers, including:<br><br>&nbsp;&nbsp;&nbsp; * C/C++ Editor (basic functionality, syntax highlighting, code completion etc.)<br>&nbsp;&nbsp;&nbsp; * C/C++ Debugger (APIs &amp; Default implementation, using GDB)<br>&nbsp;&nbsp;&nbsp; * C/C++ Launcher (APIs &amp; Default implementation, launches and external application)<br>&nbsp;&nbsp;&nbsp; * Parser<br>&nbsp;&nbsp;&nbsp; * Search Engine<br>&nbsp;&nbsp;&nbsp; * Content Assist Provider<br>&nbsp;&nbsp;&nbsp; * Makefile generator<br><br>安装eclipse-SDK-3.0-linux-gtk.zip去www.eclipse.org下载一个eclipse3.0. 将eclipse-SDK-3.0-linux-gtk.zip解压到/opt中<br><br>编写一个脚本用于启动eclipse <br>&nbsp;&nbsp; 1. #!/bin/bash&nbsp; &nbsp;<br>&nbsp;&nbsp; 2. #&nbsp; &nbsp;<br>&nbsp;&nbsp; 3. # 执行 eclipse 3&nbsp; &nbsp;<br>&nbsp;&nbsp; 4. #&nbsp; &nbsp;<br>&nbsp;&nbsp; 5. export JAVA_HOME=/usr/java/j2sdk1.4.2_11&nbsp; &nbsp;<br>&nbsp;&nbsp; 6. export CLASSPATH=/usr/java/j2sdk1.4.2_11/lib&nbsp; &nbsp;<br>&nbsp;&nbsp; 7. /opt/eclipse/eclipse -vm /usr/java/j2sdk1.4.2_06/bin/java -data /home/chenzhe/wo&nbsp; &nbsp;<br>&nbsp;&nbsp; 8. rkspace &amp;&nbsp; &nbsp;<br>&nbsp;&nbsp; 9. # -vm 参数用以指定使用哪一个 jvm 来执行Eclipse，&nbsp; &nbsp;<br>&nbsp; 10. # -date参数用以指定Eclipse的数据目录。 &nbsp;<br>在此指定其存在用户根目录(/home/chenzhe/)下的workspace目录中<br><br>将脚本保存到/usr/local/bin中，叫eclipse，并给eclipse分配755权限<br><br>在桌面上创建一个启动器，随便选一个图标,路径设置到/opt/eclipse/eclipse，/opt/eclipse/icon.xpm是eclipse自身带的图标.<br><br>双击图标,或者在终端输入eclipse<br><br><br>eclipse快捷方式&nbsp;&nbsp;&nbsp; http://caibaoying.javaeye.com/blog/46396<br># C/C++ Source Add Block Comment Ctrl+Shift+/ C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Add Include Ctrl+Shift+N C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Comment Ctrl+/ C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Find Declaration Ctrl+G C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Find References Ctrl+Shift+G C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Format Ctrl+Shift+F C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Go to Matching Bracket Ctrl+Shift+P C/C++ Editor&nbsp;&nbsp;&nbsp; http://l.u.l.u.blog.163.com/#<br># C/C++ Source Go to next C/C++ member Ctrl+Shift+向下键 C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Go to previous C/C++ member Ctrl+Shift+向上键 C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Open Declaration F3 C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Open Definition Ctrl+F3 C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Open Type Ctrl+Shift+T C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Remove Block Comment Ctrl+Shift+\ C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Show outline Ctrl+O C/C++ Editor&nbsp;&nbsp; &nbsp;<br># C/C++ Source Uncomment Ctrl+\ C/C++ Editor&nbsp;&nbsp; &nbsp;<br><br>F5 step into<br>F6 step over<br>F8 continue <br>Workspace -&gt; Project -&gt; Folder -&gt; File&nbsp;&nbsp; // Eclipse stores your projects in a folder called a workspace.&nbsp; project name eq folder name.<br>Workspace:<br>&nbsp;&nbsp; &nbsp;.metadata<br>Project:<br>&nbsp;&nbsp; &nbsp;.project&nbsp; .cproject<br>Window -&gt; Show View -&gt; Other -&gt; Debug -&gt; Memory...<br>Workbench Layout? 工作台<br>Properties -&gt; C/C++ Build -&gt; Settings -&gt; GCC C++ Linker<br>导入Project到当前workspace： File -&gt; Import -&gt; General（导入本地已经存在的）/ SVN（从svn上导入）。<br><br>Debug:<br>&nbsp;&nbsp; &nbsp;-O0 -g3 -Wall -c -fmessage-length=0<br>&nbsp;&nbsp; &nbsp;cdt.managedbuild.config.gnu.exe.debug.1755123352<br>Release:<br>&nbsp;&nbsp; &nbsp;-O3 -Wall -c -fmessage-length=0<br>&nbsp;&nbsp; &nbsp;cdt.managedbuild.config.gnu.exe.release.426542286<br>&nbsp;&nbsp; &nbsp;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1536376618<br><br>eclipse错误：<br>Failed to load JavaHL Library.<br>These are the errors that were encountered:<br>no libsvnjavahl-1 in java.library.path<br>no svnjavahl-1 in java.library.path<br>no svnjavahl in java.library.path<br>java.library.path = /home/zjl/desktop/eclipse/jre/lib/i386/client:/home/zjl/desktop/eclipse/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib<br>在linux下的eclipse上，只安装了svn的Subversion插件是不行的。还需要安装JavaHL库。在ubuntu中安装这个很简单，只需要在新立得包管理器中搜索libsvn-javahl就可以安装了。或是直接在控制台下通过sudo apt-get install libsvn-javahl安装，是一样的。<br>/usr/lib/jni/libsvnjavahl-1.so<br>/usr/lib/jni/libsvnjavahl-1.so.0<br>/usr/lib/jni/libsvnjavahl-1.so.0.0.0
<br><br><br><br><br><br><img src ="http://www.cppblog.com/toMyself/aggbug/139338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2011-01-26 12:50 <a href="http://www.cppblog.com/toMyself/archive/2011/01/26/139338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下安装feiq的方法</title><link>http://www.cppblog.com/toMyself/archive/2010/12/30/137730.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Thu, 30 Dec 2010 02:40:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/12/30/137730.html</guid><description><![CDATA[飞秋 linux<br>IP Messenger<br>This is a pop up style LAN Messenger for multi platforms.<br>It is based on TCP/IP(UDP).<br>It does not require server machine.<br>Simple, lightweight, and compact size.<br><br>linux下安装feiq的方法<br>在windows和linux文件的传送，突然想到这种方法。仅供参考：<br>安装飞鸽传书（ipmsg)<br>下载for gnome2版本的源<br>http://www.ipmsg.org/archive/g2ipmsg-0.9.6.tar.gz<br>2、解压<br>在ubuntu中用命令行 tar xzvf g2ipmsg-0.9.5.tar.gz，或者菜单右键用归档管理器解压即可。<br>3、修改语言<br>用文本编辑工具，比如gedit，打开src/codeset.c文件，将其中的CP936更改为CP936（英文）或者GBK（中文）并保存。(可以在设置－》首选项－》字符编码的外部编号，选择gbk，比较简单)<br>4、安装编译依赖项<br># apt-get install libxml-parser-perl libgnomeui-dev libpanel-applet2-dev gettext intltool<br>5、编译<br>#./configure --enable-systray<br># make<br># make install<br>这下可用了，重启后在主菜单的附件中将会有Gnome2 IP Messenger的快捷方式。OK，完成，而且可以与其他用windows的人互相传送文件。<br><br><br>OpenFetion -- Linux下的飞信，轻量级&nbsp;
<br><br><br><br>
<br> <img src ="http://www.cppblog.com/toMyself/aggbug/137730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-12-30 10:40 <a href="http://www.cppblog.com/toMyself/archive/2010/12/30/137730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Doxygen</title><link>http://www.cppblog.com/toMyself/archive/2010/12/01/135184.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Wed, 01 Dec 2010 11:30:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/12/01/135184.html</guid><wfw:comment>http://www.cppblog.com/toMyself/comments/135184.html</wfw:comment><comments>http://www.cppblog.com/toMyself/archive/2010/12/01/135184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/toMyself/comments/commentRss/135184.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/toMyself/services/trackbacks/135184.html</trackback:ping><description><![CDATA[1.1 要做什么<br><br>使用Doxygen生成文档，主要是两件事：<br><br>&nbsp;&nbsp; 1. 写一个配置文件（Doxyfile）。一般用Doxywizard生成后，再手工修改。<br>&nbsp;&nbsp; 2. 按照Doxygen的约定，将代码&#8220;文档化&#8221;。<br><br>然后只要执行命令：<br>doxygen Doxyfile<br><br>就可以了。输入文件、输出目录、参数等都是在Doxyfile中配置的。<br>1.2 得到什么<br><br>Doxygen的输出格式主要有HTML、LATEX、RTF等：<br><br>&nbsp;&nbsp;&nbsp; * Doxygen在输出HTML文档时，可以自动准备用于制作CHM的项目文件（.hhp）、目录文件（.hhc）和索引文件（.hhk）。用HTML Help Workshop中的CHM编译器（hhc.exe）编译后生成CHM文件。<br>&nbsp;&nbsp;&nbsp; * Doxygen在输出LATEX文档的同时准备了转换到pdf格式的makefile。只要系统安装了合适的TEX工具，就可以从LATEX文档生成pdf文档。<br>&nbsp;&nbsp;&nbsp; * Doxygen输出的RTF格式，已经针对Word作了优化，可以较好地转换到Word文档。<br><br><br><br>doxygen 使用简介（C,C++为代码作注释）: http://www.cnblogs.com/wishma/archive/2008/07/24/1250339.html<br><br><br>2. doxygen配置文件<br>doxygen配置文件的格式是也是通常的unix下配置文件的格式：注释'#'开始；tag = value [,value2&#8230;]；对于多值的情况可以使用 tag += value [,value2&#8230;]。<br><br>对doxygen的配置文件的修改分为两类：一种就是输出选项，控制如何解释源代码、如何输出；一种就是项目相关的信息，比如项目名称、源代码目录、输出文档目录等。对于第一种设置好后，通常所有项目可以共用一份配置，而后一种是每个项目必须设置的。下面选择重要的，有可能需要修改的选项进行解释说明，其他选项在配置文件都有详细解释。<br><br>TAG 缺省值 含义<br>PROJECT_NAME 项目名称<br>PROJECT_NUMBER 可以理解为版本信息<br>OUTPUT_DIRECTORY 输出文件到的目录，相对目录（doxygen运行目录）或者绝对目录<br>INPUT 代码文件或者代码所在目录，使用空格分割<br>FILE_PATTERNS *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl 指定INPUT的目录中特定文件，如：*.cpp *.c *.h<br>RECURSIVE NO 是否递归INPUT中目录的子目录<br>EXCLUDE 在INPUT目录中需要忽略的子目录<br>EXCLUDE_PATTERNS 明确指定的在INPUT目录中需要忽略的文件，如：FromOut*.cpp<br><br>OUTPUT_LANGUAGE English 生成文档的语言，当前支持2、30种语言，国内用户可以设置为Chinese<br>USE_WINDOWS_ENCODING YES（win版本）<br>NO（unix版本） 编码格式，默认即可。<br>EXTRACT_ALL NO 为NO，只解释有doxygen格式注释的代码；为YES，解析所有代码，即使没有注释。类的私有成员和所有的静态项由EXTRACT_PRIVATE和 EXTRACT_STATIC控制<br>EXTRACT_PRIVATE NO 是否解析类的私有成员<br>EXTRACT_STATIC NO 是否解析静态项<br>EXTRACT_LOCAL_CLASSES YES 是否解析源文件（cpp文件）中定义的类<br>SOURCE_BROWSER NO 如果为YES，源代码文件会被包含在文档中<br>INLINE_SOURCES NO 如果为YES，函数和类的实现代码被包含在文档中<br>ALPHABETICAL_INDEX NO 生成一个字母序的列表，有很多类、结构等项时建议设为YES<br>GENERATE_HTML YES 是否生成HTML格式文档<br>GENERATE_HTMLHELP NO 是否生成压缩HTML格式文档（.chm）<br>GENERATE_LATEX YES 是否乘车latex格式的文档<br>GENERATE_RTF NO 是否生成RTF格式的文档<br>GENERATE_MAN NO 是否生成man格式文档<br>GENERATE_XML NO 是否生成XML格式文档<br><br>3. doxygen注释<br>3.1 注释风格<br>下面是工作量最大部分，安装doxygen格式写注释。通常代码可以附上一个注释块来对代码进行解释，一个注释块由一行或者多行组成。通常一个注释块包括一个简要说明（brief）和一个详细说明（detailed），这两部分都是可选的。可以有多种方式标识出doxygen可识别的注释块。<br>1）JavaDoc类型的多行注释。<br><br>2）QT样式的多行注释。<br><br>3） /// &#8230;text&#8230;.<br>4） //! &#8230;text&#8230;.<br>简要说明有多种方式标识，这里推荐使用@brief命令强制说明，例如：<br><br>以上这些注释格式用来对紧跟其后的代码进行注释。doxygen也允许把注释放到代码后面，具体格式是放一个'&lt;'到注释开始部分。例如：<br>int var1 ;<br>int var2; ///&lt; &#8230;.text&#8230;.<br><br>注释和代码完全分离，放在其他地方也是允许的，但需要使用特殊的命令加上名称或者声明进行标识，比如：class、struct、union、 enum、fn、var、def、file、namespace、package、interface（这些也就是doxygen关注的注释类型）。这里不推荐使用，建议注释尽量放在代码前后。具体使用方式参见doxygen手册。<br><br>3.2 doxygen常用注释格式<br>通常的选择上面的一、两种注释风格，遇到头文件中各种类型定义，关键变量、宏的定义，在其前或者后使用 @brief 定义其简要说明，空一行后继续写其详细的注释即可。<br><br>对函数的注释，是比较常常需要注释的部分。除了定义其简要说明以及详细注释，还可以使用param命令对其各个参数进行注释，使用return命令对返回值进行注释。常见的格式如下：<br><br>int func1(int a, int b);<br><br>进行设计时，通常有模块的概念，一个模块可能有多个类或者函数组成，完成某个特定功能的代码的集合。如何对这个概念进行注释？doxygen提供了group的概念，生成的模块的注释会单独放在一个模块的页面中。使用下面的格式定义一个group。<br><br>code<br><br>group中的代码可以有自己的注释。单纯定义一个模块，去除{ 和}命令即可。任何其他代码项（比如类、函数、甚至文件）如果要加入到某个模块，可以在其doxygen注释中使用ingroup命令即可。Group之间使用ingroup命令，可以组成树状关系。<br><br>把多个代码项一起添加到某个模块中可以使用addtogroup命令，格式和defgroup相似。<br><br>对于某几个功能类似的代码项（比如类、函数、变量）等，如果希望一起添加注释，而又不想提升到模块的概念，可以通过下面的方式：<br>//@{<br><br>code&#8230;<br>//@}<br>对这种组进行命名可以使用name命令。此时中间代码可以有自己的注释。如：<br><br>//@{<br>code&#8230;<br>//@}<br><br>3.3 doxygen常用注释命令<br>doxygen通过注释命令识别注释中需要特殊处理的注释，比如函数的参数、返回值进行突出显示。上面也提到了一些注释命令（如：brief、param、return、以及group相关的命令），下面对其他一些常用的注释命令进行解释说明。<br>@exception &lt;exception-object&gt; {exception description} 对一个异常对象进行注释。<br>@warning {warning message } 一些需要注意的事情<br>@todo { things to be done } 对将要做的事情进行注释<br>@see {comment with reference to other items } 一段包含其他部分引用的注释，中间包含对其他代码项的名称，自动产生对其的引用链接。<br>@relates &lt;name&gt; 通常用做把非成员函数的注释文档包含在类的说明文档中。<br>@since {text} 通常用来说明从什么版本、时间写此部分代码。<br>@deprecated<br>@pre { description of the precondition } 用来说明代码项的前提条件。<br>@post { description of the postcondition } 用来说明代码项之后的使用条件。<br>@code 在注释中开始说明一段代码，直到@endcode命令。<br>@endcode 注释中代码段的结束。<br><br>到此为止，常用的doxygen的注释格式讨论完毕，我们能够按照一定的格式撰写doxygen认识的注释，并能够使用doxygen方便快捷的生成对应的文档，不过注释中应该写些什么，如何撰写有效的注释可能是困扰开发人员的一个更深层次的问题。<br><br>4. 注释的书写<br>注释应该怎么写，写多还是写少。过多的注释甚至会干扰对代码的阅读。写注释的一个总的原则就是注释应该尽量用来表明作者的意图，至少也应该是对一部分代码的总结，而不应该是对代码的重复或者解释。对代码的重复或者解释的代码，看代码可能更容易理解。反映作者意图的注释解释代码的目的，从解决问题的层次上进行注释，而代码总结性注释则是从问题的解答的层次上进行注释。<br><br>推荐的写注释的过程是首先使用注释勾勒出代码的主要框架，然后根据注释撰写相应的代码。对各种主要的数据结构、输出的函数、多个函数公用的变量进行详细地注释。对代码中控制结构，单一目的的语句集进行注释。下面是一些写注释时需要注意的要点：<br>避免对单独语句进行注释；<br>通过注释解释为什么这么做、或者要做什么，使代码的读者可以只阅读注释理解代码；<br>对读者可能会有疑问的地方进行注释；<br>对数据定义进行注释，而不是对其使用过程进行注释；<br>对于难于理解的代码，进行改写，而不要试图通过注释加以说明；<br>对关键的控制结构进行注释；<br>对数据和函数的边界、使用前提等进行注释；<br><br>5. 参考资料<br>1. doxygen homepage<br>http://www.stack.nl/~dimitri/doxygen/<br><br>2. doxygen manual<br>http://www.stack.nl/~dimitri/doxygen/manual.html<br><br>3. Code Complete: A Practical Handbook of Software Construction. Redmond, Wa.: Microsoft Press, 880 pages, 1993. ISBN: 1-55615-484-4.<br><br>4. 简介doxygen<br>http://www.stack.nl/~dimitri/doxygen/doxygen_intro_cn.html<br><br>5. 10 Minutes to document your code<br>http://www.codeproject.com/tips/doxysetup.asp<br><br>6. 使用doxygen<br>http://www.csdn.net/Develop/article/16%5C16383.shtm<br><br><br><br><br>类似于由C风格的注释块： /**<br>* ... 文本 ...<br>*/<br><br>此外您也可以使用Qt风格，如<br>/*!<br>* ... 文本...<br>*/<br><br>以上两种风格中间的*是可选的，也就是下面这样写也是可以的：<br>/*!<br>... 文本...<br>*/<br><br>第三种是使用至少两行C++"//"注释，如：<br>///<br>/// ... 文本...<br>///<br><br>或者<br><br>//!<br>//!...文本...<br>//!<br><br><br><br>//!简洁描述信息<br>//! 详细描述信息<br>/*! 注意，又一详细描述信息!<br>*/ 下例使用Qt风格的文档标注：<br>//! A test class.<br>/*!<br>A more elaborate class description.<br>*/<br><br>class Test<br>{<br>public:<br><br>//! An enum.<br>/*! More detailed enum description. */<br>enum TEnum {<br>TVal1, /*!&lt; Enum value TVal1. */<br>TVal2, /*!&lt; Enum value TVal2. */<br>TVal3 /*!&lt; Enum value TVal3. */<br>}<br>//! Enum pointer.<br>/*! Details. */<br>*enumPtr,<br>//! Enum variable.<br>/*! Details. */<br>enumVar;<br><br>//! A constructor.<br>/*!<br>A more elaborate description of the constructor.<br>*/<br>Test();<br><br>//! A destructor.<br>/*!<br>A more elaborate description of the destructor.<br>*/<br>~Test();<br><br>//! A normal member taking two arguments and returning an integer value.<br>/*!<br>\param a an integer argument.<br>\param s a constant character pointer.<br>\return The test results<br>\sa Test(), ~Test(), testMeToo() and publicVar()<br>*/<br>int testMe(int a,const char *s);<br><br>//! A pure virtual member.<br>/*!<br>\sa testMe()<br>\param c1 the first argument.<br>\param c2 the second argument.<br>*/<br>virtual void testMeToo(char c1,char c2) = 0;<br><br>//! A public variable.<br>/*!<br>Details.<br>*/<br>int publicVar;<br><br>//! A function variable.<br>/*!<br>Details.<br>*/<br>int (*handler)(int a,int b);<br>};<br>　　Doxygen的文档标注是不是非常容易？当然还可以有更高级的应用，如标注列表、分组，甚至支持生成公式(Latex)。上面只编译了最简单的一些使用方法，更多内容请参考Doxygen的帮助文档doxygen_manual。<br><br>附带文档的说明：<br><br>　　DoxygWizard是基于QT的简易图形用户界面，简化了Doxygen的使用。您可以在DoxygWizard里对需要生成的文档进行设置，可保存为"Doxyfile"，然后调用Doxygen生成文档。需要注意的是，文件路径不支持中文，所以尽可能使您的源代码和文档目录均为英文名。在 "Doxyfile"文件同一目录请放置一个"mylogo"纯文本文件，内容可以是一些版权标识信息，这些信息将显示在生成文档页面的最下边，如果没有此"mylogo"文件，将生成默认的版权标识信息。<br>　　样式表文件Orignl_doxygen.css、green_doxygen.css、yellow_doxygen.css、 Blue_doxygen.css，改文件名为doxygen.css后，拷贝到生成html文档的目录内可以改变文档显示的样式。<br>　　OUT PUT_LANGUAGE 可选项为Englisth(英文文档), Chinese(中文文档), En_Can_Cn(支持中文注释的英文文档)<br><br>
<br><br>实例参考:<br>下载doxygen的源代码包，里面有一个examples目录，在这里有很多注释代码例子和对应的doxygen配置文件（Doxyfile）。<br><br><br>mydoxy.cfg
<br><span style="background-color: #020000;"></span><span style="background-color: #320000;"></span><span style="background-color: #c0d0ff; color: #020000;">PROJECT_NAME&nbsp;&nbsp;&nbsp;&nbsp; = "My Project"<br>PROJECT_NUMBER&nbsp;&nbsp; &nbsp; = 1.01<br>OUTPUT_DIRECTORY = projdoc<br>INPUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ./src/<br>FILE_PATTERNS&nbsp;&nbsp; &nbsp; = *.c *.cc *.cxx *.cpp *.c++ *.h *.hh *.hxx *.hpp *.h++<br>RECURSIVE&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; = YES<br>OUTPUT_LANGUAGE&nbsp;&nbsp; &nbsp; = English<br>EXTRACT_ALL&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; = YES<br>EXTRACT_PRIVATE&nbsp;&nbsp; &nbsp; = YES<br>EXTRACT_STATIC&nbsp;&nbsp; &nbsp; = YES<br>SOURCE_BROWSER&nbsp;&nbsp; &nbsp; = YES<br>INLINE_SOURCES&nbsp;&nbsp; &nbsp; = YES<br>ALPHABETICAL_INDEX = YES<br>GENERATE_HTML&nbsp;&nbsp; &nbsp; = YES<br>GENERATE_LATEX&nbsp;&nbsp; = NO<br>GENERATE_MAN&nbsp;&nbsp;&nbsp;&nbsp; = NO<br>GENERATE_RTF&nbsp;&nbsp;&nbsp;&nbsp; = NO<br>GENERATE_XML&nbsp;&nbsp; &nbsp; = NO<br>CASE_SENSE_NAMES = NO<br>QUIET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = YES<br>JAVADOC_AUTOBRIEF = YES<br>SEARCHENGINE&nbsp;&nbsp;&nbsp;&nbsp; = NO
</span><br><br><br>Doxygen Manual<br>1, <a  href="http://www.stack.nl/~dimitri/doxygen/manual.html">http://www.stack.nl/~dimitri/doxygen/manual.html</a><a></a><br>2, <a  href="http://www.doxygen.nl/manual.html">http://www.doxygen.nl/manual.html </a><br><br><br>Use doxygen to generate a template configuration file:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doxygen [-s] -g [configName]<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If - is used for configName doxygen will write to standard output.<br><br><br>DOXYTAG(1)&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User Commands&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOXYTAG(1)<br><br>NAME<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doxytag - generates a tag file and/or a search index for a set of HTML files<br><br>SYNOPSIS<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doxytag [-t tag_file] [-s index_file] [ html_file [html_file...] ]<br><br>DESCRIPTION<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generates a tag file and/or a search index for a set of HTML files.&nbsp; Use doxysearch as a CGI program to search the tag file generated by doxytag.<br><br>OPTIONS<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -t &lt;tag_file&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generate tag file &lt;tag_file&gt;.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -s &lt;index_file&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generate search index &lt;index_file&gt;.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If no HTML files are given all files in the current dir that have a .html extension are parsed.<br><br>
<br>   <img src ="http://www.cppblog.com/toMyself/aggbug/135184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-12-01 19:30 <a href="http://www.cppblog.com/toMyself/archive/2010/12/01/135184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中文文件显示乱码或Secure CRT显示乱码解决方案</title><link>http://www.cppblog.com/toMyself/archive/2010/08/24/124512.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 24 Aug 2010 02:31:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/08/24/124512.html</guid><description><![CDATA[<p>Linux中文文件显示乱码或Secure CRT显示乱码解决方案 <br />1、设置Secure CRT</p>
<p>options-&gt;session options-&gt;appearance-&gt;fond(characters=default )</p>
<p>或者：characters=GB2312 （SecureCRT 6.5，CentOS-5.5）<br /><br />2、设置Linux</p>
<p>vi /etc/sysconfig/i18n</p>
<p>修改配置文件的内容为：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">LANG</span><span style="color: #000000">=</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">zh_CN.GB18030</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000"><br />LANGUAGE</span><span style="color: #000000">=</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">zh_CN.GB18030:zh_CN.GB2312:zh_CN</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000"><br />SUPPORTED</span><span style="color: #000000">=</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000"><br />SYSFONT</span><span style="color: #000000">=</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">lat0-sun16</span><span style="color: #000000; font-weight: bold">"</span></div><br />source /etc/sysconfig/i18n<br />此时Linux中可正常查看中文文件。<br /><br />注：先第一步，再第二步。 <br /><br /><br />SecureCRT中让vim高亮显示<br />1、配置vim，设置：<br />syntax on<br /><br />2、设置Secure CRT：<br />Options -&gt;Session Options -&gt; Terminal -&gt; Emulation 中Terminal选择ANSI or linux or xterm,必须钩上 <strong>ANSI Colour<br /></strong><br />注意：我是用的S<span class="highlight">ecureCRT</span>，想要立刻使此配置生效，要断开重连服务器，然后再用vim打开编辑文本，就可以看到效果了。<br /><br />原则：如果在Linux前台登陆，需要的效果一切都正常，只有通过SecureCRT登陆时，未达到预想中的效果，那么问题只可能出在SecureCRT上。<br /><br /><br />
<p>【问题描述】<br />1.Linux系统中含有中文内容的文件名显示乱码；<br />2.使用vi编辑器查看中文内容为乱码；<br />3.sqlplus进入到数据库中查看中文内容为乱码；<br />4.putty中中文内容显示为乱码。<br />&nbsp;<br />【问题原因】<br />1.没有安装中文支持的包；<br />2.相应的环境变量需要做相应的调整<br />&nbsp;<br />【问题处理】<br />1.确认系统版本<br /># cat /etc/RedHat-release<br />Red Hat Enterprise Linux Server release 5.4 (Tikanga)<br />&nbsp;<br />2.查看linux系统中是否已安装fonts-chinese中文语言支持包，如果没有安装，需要下载相应版本的rpm包进行安装<br /># rpm -aq | grep fonts-chinese<br />fonts-chinese-3.02-12.el5<br />&nbsp;<br />3.修改/etc/sysconfig/i18n文件为以下内容<br />LANG="zh_CN.GB18030"<br />LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"<br />SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"<br />SYSFONT="lata0-sun16"<br />SYSFONTACM="8859-15"<br />#export LC_ALL="zh_CN.GB18030"<br />&nbsp;<br />export部分可加可不加<br />&nbsp;<br />4.在/etc/profile尾部添加如下内容&nbsp; （有意义的）<br />#export LC_ALL="zh_CN.GB18030"<br />&nbsp;<br />5.注销或者reboot，Linux系统中含有中文内容的文件名显示乱码问题和使用vi编辑器查看中文内容为乱码的问题得到解决<br />&nbsp;<br />6.在Oracle用户的.bash_profile中添加如下内容，解决sqlplus进入到数据库中查看中文内容为乱码问题<br />export NLS_LANG=&#8220;SIMPLIFIED CHINESE_CHINA.ZHS16GBK"<br />&nbsp;<br />之前要确认，数据库的字符集是ZBS16GBK<br />&nbsp;<br />select * from nls_database_parameters;<br />&nbsp;<br />字段 NLS_Charset..显示<br />&nbsp;<br />7.设置putty中Window- Translation中的Received data assumed to be in which character set设置为ISO-8859-1:1998 (Latin-1, West Europe)解决putty中中文内容显示为乱码问题。<br />&nbsp;<br />至此，目前遇到的中文乱码的问题得以解决</p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/toMyself/aggbug/124512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-08-24 10:31 <a href="http://www.cppblog.com/toMyself/archive/2010/08/24/124512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gdb的使用</title><link>http://www.cppblog.com/toMyself/archive/2010/08/17/123732.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 17 Aug 2010 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/08/17/123732.html</guid><description><![CDATA[<strong><font size="2"><br />core文件的使用：<br />1、如果程序是在测试机上崩溃的，最好能够让测试人员在测试机上运行gdb命令，查看堆栈，然后把堆栈的截图发给程序开发人员。 原因：程序开发人员使用的机器和测试机不同，会导致gdb加载调试信息时失败，最后查看的堆栈会丢了很多信息，会显示很多的问号（&#8220;？&#8221;）。<br /><br /><br />==[调试前的准备]=====================================================<br /></font></strong>1、程序运行参数。<br />set&nbsp;args&nbsp;可指定运行时参数。（如：set&nbsp;args&nbsp;-f&nbsp;20&nbsp;-t&nbsp;40）<br />show&nbsp;args&nbsp;命令可以查看设置好的运行参数。<br /><br />2、运行环境。<br />path&nbsp;&nbsp;可设定程序的运行路径。<br />show&nbsp;paths&nbsp;查看程序的运行路径。<br />set&nbsp;environment&nbsp;varname&nbsp;[=value]&nbsp;设置环境变量。如：set&nbsp;env&nbsp;USER=user<br />show&nbsp;environment&nbsp;[varname]&nbsp;查看环境变量。<br /><br />3、工作目录。<br />cd&nbsp;&nbsp;相当于shell的cd命令。<br />pwd&nbsp;显示当前的所在目录。<br /><br />4、程序的输入输出。<br />info&nbsp;terminal&nbsp;显示你程序用到的终端的模式。<br />使用重定向控制程序输出。如：run&nbsp;&gt;&nbsp;outfile<br />tty命令可以指写输入输出的终端设备。如：tty&nbsp;/dev/ttyb<br /><br /><br /><strong><font size="2">==[断点]==============================================================<br /></font></strong>break&nbsp;&nbsp;&nbsp;在进入指定函数时停住<br />break&nbsp;&nbsp;&nbsp;&nbsp;在指定行号停住。<br />break&nbsp;filename:linenum&nbsp;&nbsp;&nbsp;&nbsp;在源文件filename的linenum行处停住。<br />break&nbsp;filename:function&nbsp;&nbsp;&nbsp;在源文件filename的function函数的入口处停住。<br />break&nbsp;*address&nbsp;&nbsp;&nbsp;&nbsp;在程序运行的内存地址处停住。<br />break&nbsp;...&nbsp;if&nbsp;&nbsp;&nbsp;条件成立时停住.&nbsp;例如:&nbsp;break&nbsp;337&nbsp;if&nbsp;i==0<br /><br />info&nbsp;b[n]&nbsp;:&nbsp;列出所有断点信息<br />d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;删除所有断点<br /><br /><br /><strong><font size="2">==[设置观察点（WatchPoint）]=========================================<br /></font></strong>watch&nbsp;&nbsp;&nbsp;一量表达式值有变化时，马上停住程序。<br />rwatch&nbsp;&nbsp;当表达式（变量）expr被读时，停住程序。<br />awatch&nbsp;&nbsp;当表达式（变量）的值被读或被写时，停住程序。<br />info&nbsp;watchpoints&nbsp;列出当前所设置了的所有观察点。<br /><br /><br /><strong><font size="2">==[为停止点设定运行命令(很实用的强大的功能.)]&nbsp;=======================<br /></font></strong>commands&nbsp;[bnum]<br />...&nbsp;command-list&nbsp;...<br />end<br />为断点号bnum指写一个命令列表。当程序被该断点停住时，gdb会依次运<br />行命令列表中的命令。<br /><br /><br /><strong><font size="2">==[停止条件维护]=====================================================<br /></font></strong>condition&nbsp;&nbsp;&nbsp;&nbsp;修改断点号为bnum的停止条件为expression。<br />condition&nbsp;&nbsp;&nbsp;&nbsp;清除断点号为bnum的停止条件。<br /><br /><br /><strong><font size="2">==[调试子进程]=======================================================<br /></font></strong>方法一:<br />GDB对使用fork/vfork创建子进程的程序提供了follow-fork-mode选项来支持多进程调试。<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;follow-fork-mode&nbsp;[parent|child]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;parent:&nbsp;fork之后继续调试父进程，子进程不受影响。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;child:&nbsp;fork之后调试子进程，父进程不受影响<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;(gdb)&nbsp;set&nbsp;follow-fork-mode&nbsp;child<br />&nbsp;&nbsp;&nbsp;&nbsp;(gdb)&nbsp;break&nbsp;子进程行号</font><br />方法二:<br />使用GDB的attach命令.<br />attach命令可以绑定一个外部程序进行调试(可参考(gdb)&nbsp;help&nbsp;attach).<br />假设调试名为test_proc进程的子进程.先使用<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;ps&nbsp;-ef&nbsp;|&nbsp;grep&nbsp;test_proc</font><br />找出其子进程的PID号.然后<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;(gdb)&nbsp;attach&nbsp;&lt;子进程的PID&gt;</font><br />进行调试.之后,用detach命令终止调试.<br /><br />可以把follow-fork-mode和attach混合使用,用来调试正在运行的程序的子进程.<br /><br />更详尽的解释.<br />http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/<br /><br /><br /><br /><strong><font size="2">==[自定义命令]========================================================<br /></font></strong>GDB可自定义宏命令来简化方便调试过程.命令定义在文件<br />.gdbinit文件中.自定义命令的格式为<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;define&nbsp;&lt;command&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;code&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;&lt;command&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;help&nbsp;text&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;end</font><br /><br /><br />更详尽的解释.<br />http://www.ibm.com/developerworks/cn/aix/library/au-gdb.html<br /><br /><br /><br /><strong><font size="2">==[查看C/C++中的宏定义]===================================================<br /></font></strong>首先在编译时加入参数&nbsp;&#8216;-gdwarf-2&#8217;&nbsp;&#8216;-g3&#8217;&nbsp;:<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;gcc&nbsp;-gdwarf-2&nbsp;-g3&nbsp;sample.c&nbsp;-o&nbsp;sample</font><br /><br />用于通知gcc编译器在编译时加入扩展信息.<br /><br />*&nbsp;info&nbsp;macro&nbsp;&lt;macro&nbsp;name&gt;&nbsp;:&nbsp;显示宏的信息<br />*&nbsp;macro&nbsp;expand&nbsp;expression&nbsp;:&nbsp;展开表达式expression.&nbsp;但是不会显示表达式结果.<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;假设有定义&nbsp;#define&nbsp;ADD(x,y)&nbsp;(x)+(y)&nbsp;那么<br />&nbsp;&nbsp;&nbsp;&nbsp;(gdb)&nbsp;macro&nbsp;expand&nbsp;ADD(7,8)<br />&nbsp;&nbsp;&nbsp;&nbsp;expands&nbsp;to:&nbsp;(7)+(8)</font><br /><br /><br /><strong><font size="2">==[使用GDB文本界面]======================================================<br /></font></strong>gdb&nbsp;Text&nbsp;User&nbsp;Interface(TUI)&nbsp;GDB&nbsp;文本用户界面<br />(1)&nbsp;打开TUI模式<br />&nbsp;&nbsp;&nbsp;&nbsp;方法一:&nbsp;使用&#8216;gdbtui&#8217;&nbsp;or&nbsp;&#8216;gdb-tui&#8217;开始一个调试<br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;gdbtui&nbsp;-q&nbsp;sample<br />&nbsp;&nbsp;&nbsp;&nbsp;(gdb)&nbsp;....</font><br />&nbsp;&nbsp;&nbsp;&nbsp;方法二:&nbsp;使用切换键&nbsp;`ctrl+x&nbsp;ctrl+a`&nbsp;or&nbsp;`ctrl+x&nbsp;A`<br />(2)&nbsp;TUI模式下有4个窗口,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令窗口.&nbsp;可以键入调试命令<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;源代码窗口.&nbsp;显示当前行,断点等信息<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assembly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;汇编代码窗口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;寄存器窗口<br />&nbsp;&nbsp;&nbsp;&nbsp;除command&nbsp;窗口外,其他三个窗口不可同时显示.其可用&nbsp;layout&nbsp;命令来进行选择<br />&nbsp;&nbsp;&nbsp;&nbsp;自己需要的窗口.&nbsp;可参见&nbsp;`help&nbsp;layout`&nbsp;.<br />(3)&nbsp;设置TUI<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;tui&nbsp;border-kind&nbsp;kind<br />&nbsp;&nbsp;&nbsp;&nbsp;Select&nbsp;the&nbsp;border&nbsp;appearance&nbsp;for&nbsp;the&nbsp;source,&nbsp;assembly&nbsp;and&nbsp;register&nbsp;windows.<br />&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;possible&nbsp;values&nbsp;are&nbsp;the&nbsp;following:<br />&nbsp;&nbsp;&nbsp;&nbsp;space:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use&nbsp;a&nbsp;space&nbsp;character&nbsp;to&nbsp;draw&nbsp;the&nbsp;border.<br />&nbsp;&nbsp;&nbsp;&nbsp;ascii:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use&nbsp;ascii&nbsp;characters&nbsp;&#8216;+&#8217;,&nbsp;&#8216;-&#8217;&nbsp;and&nbsp;&#8216;|&#8217;&nbsp;to&nbsp;draw&nbsp;the&nbsp;border.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acs&nbsp;Use&nbsp;the&nbsp;Alternate&nbsp;Character&nbsp;Set&nbsp;to&nbsp;draw&nbsp;the&nbsp;border.&nbsp;The&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border&nbsp;is<br />&nbsp;&nbsp;&nbsp;&nbsp;drawn:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;character&nbsp;line&nbsp;graphics&nbsp;if&nbsp;the&nbsp;terminal&nbsp;supports&nbsp;them.<br />(4)&nbsp;更详尽的说明<br />&nbsp;&nbsp;&nbsp;&nbsp;http://sourceware.org/gdb/current/onlinedocs/gdb_23.html#SEC235.<br /><br />另：<br />ctrl+x再ctrl+a： 在classic和layout两种方式之间切换gdb的显示方式。（layout方式的gdb很有用，但是layout方式的gdb有bug，你会用到这种快速切换的）<br /><br /><span style="font-size: 18pt">再另：<strong>GDB Text User Interface</strong></span><strong> </strong><br />The GDB Text User Interface, TUI in short, is a terminal interface which uses the <code>curses</code> library to show the source file, the assembly output, the program registers and GDB commands in separate text windows. The TUI is available only when GDB is configured with the <code>--enable-tui</code> configure option (see section <a href="http://davis.lbl.gov/Manuals/GDB/gdb_29.html#SEC628"><u><font color="#0000ff">B.3 <code>configure</code> options</font></u></a>). <br /><br />1 TUI overview <!--docid::sec199::-->

<p>The TUI has two display modes that can be switched while GDB runs: </p>
<p>
<ul><li>A curses (or TUI) mode in which it displays several text windows on the terminal. 
<p>&nbsp;</p></li><li>A standard mode which corresponds to the GDB configured without the TUI. </li></ul>
<p>In the TUI mode, GDB can display several text window on the terminal: </p>
<p>
<dl compact>
<dt><em>command</em> 
<dd>This window is the GDB command window with the GDB prompt and the GDB outputs. The GDB input is still managed using readline but through the TUI. The <em>command</em> window is always visible. 
<p>&nbsp;</p>
<dt><em>source</em> 
<dd>The source window shows the source file of the program. The current line as well as active breakpoints are displayed in this window. The current program position is shown with the <samp>`&gt;'</samp> marker and active breakpoints are shown with <samp>`*'</samp> markers. 
<p>&nbsp;</p>
<dt><em>assembly</em> 
<dd>The assembly window shows the disassembly output of the program. 
<p>&nbsp;</p>
<dt><em>register</em> 
<dd>This window shows the processor registers. It detects when a register is changed and when this is the case, registers that have changed are highlighted. 
<p>&nbsp;</p></dd></dl>
<p>The source, assembly and register windows are attached to the thread and the frame position. They are updated when the current thread changes, when the frame changes or when the program counter changes. These three windows are arranged by the TUI according to several layouts. The layout defines which of these three windows are visible. The following layouts are available: </p>
<p>
<ul><li>source 
<p>&nbsp;</p></li><li>assembly 
<p>&nbsp;</p></li><li>source and assembly 
<p>&nbsp;</p></li><li>source and registers 
<p>&nbsp;</p></li><li>assembly and registers </li></ul>
<p>2 TUI Key Bindings <!--docid::sec200::--></p>
<p>The TUI installs several key bindings in the readline keymaps (see section <a href="http://davis.lbl.gov/Manuals/GDB/gdb_26.html#SEC597"><u><font color="#0000ff">25. Command Line Editing</font></u></a>). They allow to leave or enter in the TUI mode or they operate directly on the TUI layout and windows. The following key bindings are installed for both TUI mode and the GDB standard mode. </p>
<p>
<dl compact><a name="IDX839"></a>
<dt><kbd>C-x C-a</kbd> 
<dd><a name="IDX840"></a>
<dt><kbd>C-x a</kbd> 
<dd><a name="IDX841"></a>
<dt><kbd>C-x A</kbd> 
<dd>Enter or leave the TUI mode. When the TUI mode is left, the curses window management is left and GDB operates using its standard mode writing on the terminal directly. When the TUI mode is entered, the control is given back to the curses windows. The screen is then refreshed. 
<p><a name="IDX842"></a></p>
<dt><kbd>C-x 1</kbd> 
<dd>Use a TUI layout with only one window. The layout will either be <samp>`source'</samp> or <samp>`assembly'</samp>. When the TUI mode is not active, it will switch to the TUI mode. 
<p>Think of this key binding as the Emacs <kbd>C-x 1</kbd> binding. </p>
<p><a name="IDX843"></a></p>
<dt><kbd>C-x 2</kbd> 
<dd>Use a TUI layout with at least two windows. When the current layout shows already two windows, a next layout with two windows is used. When a new layout is chosen, one window will always be common to the previous layout and the new one. 
<p>Think of it as the Emacs <kbd>C-x 2</kbd> binding. </p>
<p>&nbsp;</p></dd></dl>
<p>The following key bindings are handled only by the TUI mode: </p>
<p>
<dl compact><a name="IDX844"></a>
<dt><kbd>PgUp</kbd> 
<dd>Scroll the active window one page up. 
<p><a name="IDX845"></a></p>
<dt><kbd>PgDn</kbd> 
<dd>Scroll the active window one page down. 
<p><a name="IDX846"></a></p>
<dt><kbd>Up</kbd> 
<dd>Scroll the active window one line up. 
<p><a name="IDX847"></a></p>
<dt><kbd>Down</kbd> 
<dd>Scroll the active window one line down. 
<p><a name="IDX848"></a></p>
<dt><kbd>Left</kbd> 
<dd>Scroll the active window one column left. 
<p><a name="IDX849"></a></p>
<dt><kbd>Right</kbd> 
<dd>Scroll the active window one column right. 
<p><a name="IDX850"></a></p>
<dt><kbd>C-L</kbd> 
<dd>Refresh the screen. 
<p>&nbsp;</p></dd></dl>
<p>In the TUI mode, the arrow keys are used by the active window for scrolling. This means they are not available for readline. It is necessary to use other readline key bindings such as <kbd>C-p</kbd>, <kbd>C-n</kbd>, <kbd>C-b</kbd> and <kbd>C-f</kbd>.</p><br />3 TUI specific commands <!--docid::sec201::-->

<p>The TUI has specific commands to control the text windows. These commands are always available, that is they do not depend on the current terminal mode in which GDB runs. When GDB is in the standard mode, using these commands will automatically switch in the TUI mode. </p>
<p>
<dl compact>
<dt><code>layout next</code> 
<dd><a name="IDX851"></a>Display the next layout. 
<p>&nbsp;</p>
<dt><code>layout prev</code> 
<dd><a name="IDX852"></a>Display the previous layout. 
<p>&nbsp;</p>
<dt><code>layout src</code> 
<dd><a name="IDX853"></a>Display the source window only. 
<p>&nbsp;</p>
<dt><code>layout asm</code> 
<dd><a name="IDX854"></a>Display the assembly window only. 
<p>&nbsp;</p>
<dt><code>layout split</code> 
<dd><a name="IDX855"></a>Display the source and assembly window. 
<p>&nbsp;</p>
<dt><code>layout regs</code> 
<dd><a name="IDX856"></a>Display the register window together with the source or assembly window. 
<p>&nbsp;</p>
<dt><code>focus next | prev | src | asm | regs | split</code> 
<dd><a name="IDX857"></a>Set the focus to the named window. This command allows to change the active window so that scrolling keys can be affected to another window. 
<p>&nbsp;</p>
<dt><code>refresh</code> 
<dd><a name="IDX858"></a>Refresh the screen. This is similar to using <kbd>C-L</kbd> key. 
<p>&nbsp;</p>
<dt><code>update</code> 
<dd><a name="IDX859"></a>Update the source window and the current execution point. 
<p>&nbsp;</p>
<dt><code>winheight <var>name</var> +<var>count</var></code> 
<dd>
<dt><code>winheight <var>name</var> -<var>count</var></code> 
<dd><a name="IDX860"></a>Change the height of the window <var>name</var> by <var>count</var> lines. Positive counts increase the height, while negative counts decrease it. 
<dd>&nbsp;</dd></dl>
<p>4 TUI configuration variables <!--docid::sec202::--></p>
<p>The TUI has several configuration variables that control the appearance of windows on the terminal. </p>
<p>
<dl compact>
<dt><code>set tui border-kind <var>kind</var></code> 
<dd><a name="IDX861"></a>Select the border appearance for the source, assembly and register windows. The possible values are the following: 
<dl compact>
<dt><code>space</code> 
<dd>Use a space character to draw the border. 
<p>&nbsp;</p>
<dt><code>ascii</code> 
<dd>Use ascii characters + - and | to draw the border. 
<p>&nbsp;</p>
<dt><code>acs</code> 
<dd>Use the Alternate Character Set to draw the border. The border is drawn using character line graphics if the terminal supports them. 
<p>&nbsp;</p></dd></dl>
<p>&nbsp;</p>
<dt><code>set tui active-border-mode <var>mode</var></code> 
<dd><a name="IDX862"></a>Select the attributes to display the border of the active window. The possible values are <code>normal</code>, <code>standout</code>, <code>reverse</code>, <code>half</code>, <code>half-standout</code>, <code>bold</code> and <code>bold-standout</code>. 
<p>&nbsp;</p>
<dt><code>set tui border-mode <var>mode</var></code> 
<dd><a name="IDX863"></a>Select the attributes to display the border of other windows. The <var>mode</var> can be one of the following: 
<dl compact>
<dt><code>normal</code> 
<dd>Use normal attributes to display the border. 
<p>&nbsp;</p>
<dt><code>standout</code> 
<dd>Use standout mode. 
<p>&nbsp;</p>
<dt><code>reverse</code> 
<dd>Use reverse video mode. 
<p>&nbsp;</p>
<dt><code>half</code> 
<dd>Use half bright mode. 
<p>&nbsp;</p>
<dt><code>half-standout</code> 
<dd>Use half bright and standout mode. 
<p>&nbsp;</p>
<dt><code>bold</code> 
<dd>Use extra bright or bold mode. 
<p>&nbsp;</p>
<dt><code>bold-standout</code> 
<dd>Use extra bright or bold and standout mode. 
<p>&nbsp;</p></dd></dl>
<p>&nbsp;</p></dd></dl>
<p><br /></p><img src ="http://www.cppblog.com/toMyself/aggbug/123732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-08-17 15:01 <a href="http://www.cppblog.com/toMyself/archive/2010/08/17/123732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vim命令</title><link>http://www.cppblog.com/toMyself/archive/2010/08/02/121991.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Mon, 02 Aug 2010 10:20:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/08/02/121991.html</guid><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">Vim&nbsp;注释多行详细说明：<br>ctrl+v&nbsp;进入列模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符,比如#,再按Esc,就会全部注释。</span></div>
<img src ="http://www.cppblog.com/toMyself/aggbug/121991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-08-02 18:20 <a href="http://www.cppblog.com/toMyself/archive/2010/08/02/121991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux上抓包</title><link>http://www.cppblog.com/toMyself/archive/2010/08/02/121972.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Mon, 02 Aug 2010 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/08/02/121972.html</guid><description><![CDATA[linux上抓包：<br>1、tcpdump port portNum -w fileName<br>2、将fileName拿到windows上，修改扩展名为.pcap，使用Ethereal打开。<br><br><br>//TODO: 介绍Ethereal的使用（或其它Windows抓包工具的使用）<br><br>
<img src ="http://www.cppblog.com/toMyself/aggbug/121972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-08-02 15:45 <a href="http://www.cppblog.com/toMyself/archive/2010/08/02/121972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf 或者 使用-R选项)</title><link>http://www.cppblog.com/toMyself/archive/2010/08/02/121971.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Mon, 02 Aug 2010 07:39:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/08/02/121971.html</guid><description><![CDATA[<p>Linux 运行的时候，是如何管理共享库(*.so)的？在 Linux 下面，共享库的寻找和加载是由 /lib/ld.so 实现的。 ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。</p>
<p>但是，如果需要用到的共享库在非标准路经，ld.so 怎么找到它呢？</p>
<p>目前，Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf，然后运行 ldconfig 生成 /etc/ld.so.cache。 ld.so 加载共享库的时候，会从 ld.so.cache 查找。</p>
<p>传统上，Linux 的先辈 Unix 还有一个环境变量：LD_LIBRARY_PATH 来处理非标准路经的共享库。ld.so 加载共享库的时候，也会查找这个变量所设置的路经。</p>
<p>LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib</p>
<p>export LD_LIBRARY_PATH</p>
<p>但是，有不少声音主张要避免使用 LD_LIBRARY_PATH 变量，尤其是作为全局变量。这些声音是：</p>
<p>* LD_LIBRARY_PATH is not the answer - http://prefetch.net/articles/linkers.badldlibrary.html</p>
<p>* Why LD_LIBRARY_PATH is bad - http://xahlee.org/UnixResource_dir/_/ldpath.html&nbsp;</p>
<p>* LD_LIBRARY_PATH - just say no - http://blogs.sun.com/rie/date/20040710</p>
<p>解决这一问题的另一方法是<strong>在编译的时候通过 -R&lt;path&gt; 选项指定 run-time path</strong>。</p>
<p>1. 往/lib和/usr/lib里面加东西，是不用修改/etc/ld.so.conf的，但是完了之后要调一下<strong>ldconfig</strong>，不然这个library会找不到</p>
<p>2. 想往上面两个目录以外加东西的时候，一定要修改/etc/ld.so.conf，然后再调用ldconfig，不然也会找不到。</p>
<p>比如安装了一个mysql到/usr/local/mysql，mysql有一大堆library在/usr/local/mysql/lib下面，这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib，保存过后ldconfig一下，新的library才能在程序运行时被找到。</p>
<p>3. 如果想在这两个目录以外放lib，但是又不想在/etc/ld.so.conf中加东西（或者是没有权限加东西）。那也可以，就是export一个全局变量LD_LIBRARY_PATH，然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案，在没有权限或临时需要的时候使用。</p>
<p>4. ldconfig做的这些东西都与运行程序时有关，跟编译时一点关系都没有。编译的时候还是该加-L就得加，不要混淆了。</p>
<p>5. 总之，就是不管做了什么关于library的变动后，最好都ldconfig一下，不然会出现一些意想不到的结果。不会花太多的时间，但是会省很多的事。</p>
<p>LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的，它告诉loader：在哪些目录中可以找到共享库。可以设置多个搜索目录，这些目录之间用冒号分隔开。在linux下，还提供了另外一种方式来完成同样的功能，你可以把这些目录加到/etc/ld.so.conf中，然后调用ldconfig。当然，这是系统范围内全局有效的，而环境变量只对当前shell有效。按照惯例，除非你用上述方式指明，loader是不会在当前目录下去找共享库的，正如shell不会在当前目前找可执行文件一样。</p>
<br>
<p>================================================================================================</p>
<p>&nbsp;</p>
<p>在shell下尝试设置LD_LIBRARY_PATH，以下面这种形式设置，老是报错bash: LD_LIBRARY_PATH: command not found，</p>
<p>LD_LIBRARY_PATH=/usr/local/lib</p>
<p>LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/usr/local/lib</p>
<p>可能是因为系统之前没有设置过LD_LIBRARY_PATH，于是改成这样：</p>
<p>export LD_LIBRARY_PATH=/usr/local/lib</p>
<p>然后用 echo $LD_LIBRARY_PATH检查一下是否真的设置成功，发现可以。</p>
<p>接着在该shell下运行eclipse生成的可执行文件，没有错误。</p>
<p>&nbsp;</p>
<p>另外，如果不想每次新启一个shell都设置LD_LIBRARY_PATH，可以编辑~/.bash_profile文件：</p>
<p>$ vi ~/.bash_profile&nbsp;</p>
<p>添加：</p>
<p>LD_LIBRARY_PATH=/usr/local/lib</p>
<p>export LD_LIBRARY_PATH</p>
<p>这两行，完成之后.bash_profile如下所示：</p>
<p>&nbsp;</p>
<p># .bash_profile</p>
<p># Get the aliases and functions</p>
<p>if [ -f ~/.bashrc ]; then</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;. ~/.bashrc</p>
<p>fi</p>
<br>
<p># User specific environment and startup programs</p>
<p>PATH=$PATH:$HOME/bin</p>
<p>LD_LIBRARY_PATH=/usr/local/lib</p>
<p>export PATH</p>
<p>export LD_LIBRARY_PATH<br><br>然后运行<br>$ source ~/.bash_profile 就行了。</p>
<br><br><br>实例：<br>export LD_LIBRARY_PATH=../lib/<br>
<img src ="http://www.cppblog.com/toMyself/aggbug/121971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-08-02 15:39 <a href="http://www.cppblog.com/toMyself/archive/2010/08/02/121971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QQ代理</title><link>http://www.cppblog.com/toMyself/archive/2010/08/02/121965.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Mon, 02 Aug 2010 07:17:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2010/08/02/121965.html</guid><description><![CDATA[<p>HTTP代理软件<br>&gt;tasklist<br>图像名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID 会话名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内存使用<br>QQ.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2512 Console&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 31,912 K<br>&gt;netstat -ano<br>TCP&nbsp;&nbsp;&nbsp; 192.168.0.166:4231&nbsp;&nbsp;&nbsp;&nbsp; 58.251.60.166:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLOSE_WAIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2512<br>TCP&nbsp;&nbsp;&nbsp; 192.168.0.166:4232&nbsp;&nbsp;&nbsp;&nbsp; 58.251.60.166:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLOSE_WAIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2512<br>58.251.60.166，这个ip是qq服务器的地址。<br>设置QQ代理<br>两种方法：第一，在qq的&#8220;个人设置&#8221;中选择&#8220;系统设置&#8221;，然后选择&#8220;代理设置&#8221;，选择 &#8220;使用浏览器的网络设置&#8221; 的前提是浏览器使用了代理，选择使用&#8220;自定义的网络类型&#8221;则有三个选项，当然不能选择 &#8220;不使用代理服务器&#8221; 了，选择其他两个选项，再在下面&#8220;服务器&#8221;&#8220;端口&#8221;中添写代理服务器的地址，选择&#8220;测试&#8221;测试代理服务器是否正常工作，如果正常工作就可以确定使用了；如果出错就要重新填写代理地址和端口了。代理服务器的可以使用qq代理公布器也可以使用代理超人或代理猎手之类的软件查找，我发现台湾的代理服务器比较好用。<br>月亮HTTP代理列表 1.12 绿色干净版.exe，一个能找到现在网络上有什么机器提供了代理功能。<br>代理服务器的可以使用qq代理公布器也可以使用代理超人或代理猎手之类的软件查找。目前网上流行的用qq代理公布器的比较多。</p>
<p>210.82.57.79:8080@HTTP;北京市 联通ADSL<br>211.152.11.30:80@HTTP;北京市 联通ADSL<br>220.113.9.162:80@HTTP;北京市 长城宽带</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/toMyself/aggbug/121965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2010-08-02 15:17 <a href="http://www.cppblog.com/toMyself/archive/2010/08/02/121965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用SecureCRT来上传和下载数据</title><link>http://www.cppblog.com/toMyself/archive/2009/09/15/96252.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 15 Sep 2009 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/09/15/96252.html</guid><description><![CDATA[用SecureCRT来上传和下载数据：<br>1.选中你要放置上传文件的路径，在目录下然后输入rz命令,SecureCRT会弹出文件选择对话框，在查找范围中找到你要上传的文件，按Add按钮。然后OK就可以把文件上传到linux上了。<br>2.sz filename，zmodem接收可以自行启动.下载的文件存放在你设定的默认下载目录下.<br>&nbsp; 还可以在命令行使用 sx 文件名 ，然后在transfer菜单选择receive xmodem... ，选择你要保存的目录和文件名，点击receive 就可以了<br><br><br><br><br>SecureCRT可以使用linux下的zmodem协议来快速的传送文件.<br><br>你只要设置一下上传和下载的默认目录就行<br>options-&gt;session options -&gt;Terminal-&gt;Xmodem/Zmodem 下<br>在右栏directory设置上传和下载的目录<br><br>&nbsp;使用Zmodem从客户端上传文件到linux服务器<br>1.在用SecureCRT登陆linux终端.<br>2.选中你要放置上传文件的路径，在目录下然后输入rz命令,SecureCRT会弹出文件选择对话框，在查找范围中找到你要上传的文件，按Add按钮。然后OK就可以把文件上传到linux上了。<br>或者在Transfer-&gt;Zmodem Upoad list弹出文件选择对话框，选好文件后按Add按钮。然后OK窗口自动关闭。然后在linux下选中存放文件的目录，输入rz命令。liunx就把那个文件上传到这个目录下了。<br><br>使用Zmodem下载文件到客户端：<br>sz filename<br>zmodem接收可以自行启动.下载的文件存放在你设定的默认下载目录下.<br><br><br>又记：<br>rz，sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具windows端需要支持ZModem的telnet/ssh客户端，SecureCRT就可以用SecureCRT登陆到Unix/Linux主机（telnet或ssh均可）O 运行命令rz，即是接收文件，SecureCRT就会弹出文件选择对话框，选好文件之后关闭对话框，文件就会上传到当前目录 O 运行命令sz file1 file2就是发文件到windows上（保存的目录是可以配置） 比ftp命令方便多了，而且服务器不用再开FTP服务了
<br><br><br><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;">&nbsp;VIM&nbsp;支持&nbsp;UTF8的设定<br>options-&gt;session options -&gt;Terminal-&gt;Appearance 下，设置Nomal font：新宋体 10pt，Character encoding：Default<br><br>VIM中文设置，支持中文UTF_8的locale设定</span><span style="color: #000000;">,</span><span style="color: #000000;">拷贝以下内容到</span><span style="color: #000000;">~/.</span><span style="color: #000000;">vimrc或</span><span style="color: #000000;">~/.</span><span style="color: #000000;">gvimrc中即可。<br><br></span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">&nbsp;multi-encoding&nbsp;setting<br><br>if&nbsp;has(</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">multi_byte</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">)<br><br></span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">set&nbsp;bomb<br><br>set&nbsp;fileencodings</span><span style="color: #000000;">=</span><span style="color: #000000;">ucs</span><span style="color: #000000;">-</span><span style="color: #000000;">bom</span><span style="color: #000000;">,</span><span style="color: #000000;">utf</span><span style="color: #000000;">-</span><span style="color: #800000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">cp936</span><span style="color: #000000;">,</span><span style="color: #000000;">big5</span><span style="color: #000000;">,</span><span style="color: #000000;">euc</span><span style="color: #000000;">-</span><span style="color: #000000;">jp</span><span style="color: #000000;">,</span><span style="color: #000000;">euc</span><span style="color: #000000;">-</span><span style="color: #000000;">kr</span><span style="color: #000000;">,</span><span style="color: #000000;">latin1<br><br></span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">&nbsp;CJK&nbsp;environment&nbsp;detection&nbsp;and&nbsp;corresponding&nbsp;setting<br><br>if&nbsp;v:lang&nbsp;=~&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">^</span><span style="color: #000000;">zh_CN</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;"><br><br></span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Use</span><span style="color: #000000;">&nbsp;cp936&nbsp;to&nbsp;support&nbsp;GBK</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;euc</span><span style="color: #000000;">-</span><span style="color: #000000;">cn&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;gb2312<br><br>set&nbsp;encoding</span><span style="color: #000000;">=</span><span style="color: #000000;">cp936<br><br>set&nbsp;termencoding</span><span style="color: #000000;">=</span><span style="color: #000000;">cp936<br><br>set&nbsp;fileencoding</span><span style="color: #000000;">=</span><span style="color: #000000;">cp936<br><br>endif<br><br></span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">&nbsp;Detect&nbsp;UTF-8&nbsp;locale,&nbsp;and&nbsp;replace&nbsp;CJK&nbsp;setting&nbsp;if&nbsp;needed<br><br>if&nbsp;v:lang&nbsp;=~&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">utf8$</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">&nbsp;||&nbsp;v:lang&nbsp;=~&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">UTF</span><span style="color: #000000;">-</span><span style="color: #800000;">8</span><span style="color: #000000;">$</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;"><br><br>set&nbsp;encoding=utf-8<br><br>set&nbsp;termencoding=utf-8<br><br>set&nbsp;fileencoding=utf-8<br><br>endif<br><br>else<br><br>echoerr&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">Sorry</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;this&nbsp;version&nbsp;of&nbsp;(g)vim&nbsp;was&nbsp;not&nbsp;compiled&nbsp;with<br><br>multi_byte</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;"><br><br>endif<br><br>/etc/rcS.d/</span></div>
<br>  <img src ="http://www.cppblog.com/toMyself/aggbug/96252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-09-15 17:52 <a href="http://www.cppblog.com/toMyself/archive/2009/09/15/96252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用VIM编写C/C++程序</title><link>http://www.cppblog.com/toMyself/archive/2009/09/15/96244.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 15 Sep 2009 09:28:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/09/15/96244.html</guid><description><![CDATA[用VIM编写C/C++程序<br>使用vi查看编译时出错的地方？<br><br>摘要：用VIM编写C/C++程序 ctags -R,最方便的方法是把光标移到变量名或函数名上，然后按下&#8220;Ctrl-]&#8221;。用&#8220;Ctrl-o&#8221;退回原来的地方。用&#8220;:make&#8221;就可以编译程序 <br>
<p>&#160;</p>
<p>用VIM编写C/C++程序</p>
<p>Vi是Unix下最常用的文本编辑器。VIM（Vi IMproved）则是它的增强版。有人常常拿VIM和emacs比较，VIM尽管不象emacs那样有那么多的功能，但是比emacs更方便、好用。用过emacs的人肯定会为emacs的一些快捷键感到烦恼，有时候用真希望自己有八只手。VIM的学习曲线也不象emacs那么长，只要看看VIM自带的 vitutor，大约只要20分钟就能掌握VIM的用法。对于Unix下的C/C++的程序员，我推荐你们使用VIM+Ctags的组合来写程序。其中原因听我慢慢道来。（下面对VIM的介绍主要是针对5.6以后的版本）<br>VIM支持语法制导和自动缩进</p>
<p>VIM会根据文件的后缀名，如：*.c、*.cpp、*.cc，等，自动设置语法制导（Syntax Highlighting）。C/C++中的一些保留字，如：if、for、include，等等，就会有不同的颜色，这样就会减少程序员犯错的可能，阅读程序的时候相对来说也轻松很多。用下面这些命令在VIM中查看有关语法制导的帮助：&#8220;:h syntax&#8221;、&#8220;:h syn-qstart&#8221;、&#8220;:h syntax-printing&#8221;。</p>
<p>VIM也支持根据GNU的风格自动缩进，这样程序员编写出来的代码就更易阅读，而且也有利于培养好的编程风格。用下面这些命令在VIM中查看有关自动缩进的帮助：&#8220;:h cindent&#8221;、&#8220;:h cinoptions&#8221;、&#8220;:h cinoptions-values&#8221;、&#8220;:h cinkeys&#8221;、&#8220;:h cinwords&#8221;。<br>使用Ctags</p>
<p>VIM中已经带了Ctags这个程序。尽管ctags也可以支持其它编辑器，但是它正式支持的只有VIM。Ctags可以帮助程序员很容易地浏览源代码。用下面的命令可以在源代码的根目录下创建&#8220;tags&#8221;文件：</p>
<p>[/home/brimmer/src]$ ctags -R</p>
<p>&#8220;-R&#8221;表示递归创建，也就包括源代码根目录下的所有子目录下的源程序。&#8220;tags&#8221;文件中包括这些对象的列表：</p>
<p>l 用#define定义的宏</p>
<p>l 枚举型变量的值</p>
<p>l 函数的定义、原型和声明</p>
<p>l 名字空间（namespace）</p>
<p>l 类型定义（typedefs）</p>
<p>l 变量（包括定义和声明）</p>
<p>l 类（class）、结构（struct）、枚举类型（enum）和联合（union）</p>
<p>l 类、结构和联合中成员变量或函数</p>
<p>VIM用这个&#8220;tags&#8221;文件来定位上面这些做了标记的对象，下面介绍一下定位这些对象的方法：</p>
<p>1) 用命令行。在运行vim的时候加上&#8220;-t&#8221;参数，例如：</p>
<p>[/home/brimmer/src]$ vim -t foo_bar</p>
<p>这个命令将打开定义&#8220;foo_bar&#8221;（变量或函数或其它）的文件，并把光标定位到这一行。</p>
<p>2) 在vim编辑器内用&#8220;:ta&#8221;命令，例如：</p>
<p>:ta foo_bar</p>
<p>3) 最方便的方法是把光标移到变量名或函数名上，然后按下&#8220;Ctrl-]&#8221;。用&#8220;Ctrl-o&#8221;退回原来的地方。</p>
<p>注意：运行vim的时候，必须在&#8220;tags&#8221;文件所在的目录下运行。否则，运行vim的时候还要用&#8220;:set tags=&#8221;命令设定&#8220;tags&#8221;文件的路径，这样vim才能找到&#8220;tags&#8221;文件。<br>快速改正错误</p>
<p>在VIM编辑器的环境下用&#8220;:make&#8221;就可以编译程序，当然其前提是在当前目录下有Makefile文件。运行完&#8220;:make&#8221;之后，如果程序中有错误，就会显示出来。这时候，光标会自动指向第一个出现错误的地方，而且你还可以看到错误的提示。然后，你就可以改正错误，而不用手工找到出错的那一行。记住下面几个有用的命令：</p>
<p>l &#8220;:cl&#8221;列出错误<br></p>
<p>l &#8220;:copen&#8221;&nbsp; Open a window to show the current list of errors.<br>l &#8220;:cn&#8221;让光标指向下一个错误</p>
<p>l &#8220;:cp&#8221;让光标指向上一个错误</p>
<p>l &#8220;:cnew&#8221;从头开始</p>
<p>你甚至可以让VIM识别出其它编译器而不是gcc的错误提示。这对一些开发嵌入式系统的程序员这很有用，因为他们很可能用的不是gcc而是其它编译器。通过设置&#8220;errorformat&#8221;的值，可以让VIM识别出编译器的出错提示。因为不同的编译器的出错提示是不同的，所以如果用的不是gcc就要重新设置。</p>
<p>&#8220;errorformat&#8221;的值是一个字符串，它的格式和C语言的scanf的字符串格式相识。</p>
<p>gcc的&#8220;errorformat&#8221;的值为：％f:％l:％m。其中&#8220;％f&#8221;表示文件名，&#8220;％l&#8221;表示行号，&#8220;％m&#8221;表示出错信息。</p>
<p>用&#8220;:h errorformat&#8221;查看详细的帮助信息。</p>
<p>用&#8220;:h quickfix&#8221;、&#8220;:h make&#8221;、&#8220;:h makeprg&#8221;、&#8220;:h errorfile&#8221;查看其它的信息。<br>有用的快捷键</p>
<p>下面的这些快捷键对程序员很有帮助：<br>在函数中移动光标</p>
<p>[[ 转到上一个位于第一列的&#8220;{&#8221;</p>
<p>]] 转到下一个位于第一列的&#8220;{&#8221;</p>
<p>{ 转到上一个空行</p>
<p>} 转到下一个空行</p>
<p>gd 转到当前光标所指的局部变量的定义</p>
<p>* 转到当前光标所指的单词下一次出现的地方</p>
<p># 转到当前光标所指的单词上一次出现的地方<br>括号的匹配</p>
<p>％ 用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。<br>其它</p>
<p>VIM的配置文件是&#8220;.vimrc&#8221;，用这个文件可以配置VIM。VIM的图形界面的版本叫gvim。VIM也有用于Windows平台的版本。<br>VIM的资源</p>
<p>VIM的主页：<a href="http://www.vim.org/">http://www.vim.org/</a>。<br>版权说明</p>
<p>这篇文章的版权属于作者brimmer（<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#114;&#105;&#109;&#109;&#101;&#114;&#64;&#108;&#105;&#110;&#117;&#120;&#97;&#105;&#100;&#46;&#99;&#111;&#109;&#46;&#99;&#110;">brimmer@linuxaid.com.cn</a>）和<a href="http://www.linuxaid.com.cn/">www.linuxaid.com.cn</a>。如果要转载请加上版权提示。</p>
<p>Brimmer的主页：<a href="http://www.linuxaid.com.cn/engineer/brimmer">www.linuxaid.com.cn/engineer/brimmer</a>。HTML格式和Word格式的文档可以在主页上找到。</p>
<p>&#160;</p>
<strong><br></strong><br><br>
<img src ="http://www.cppblog.com/toMyself/aggbug/96244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-09-15 17:28 <a href="http://www.cppblog.com/toMyself/archive/2009/09/15/96244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Linux下删除文件行末尾的^M符号方法</title><link>http://www.cppblog.com/toMyself/archive/2009/09/15/96241.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 15 Sep 2009 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/09/15/96241.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">在Linux下删除文件行末尾的</span><span style="color: #000000;">^</span><span style="color: #000000;">M符号方法:<br>在Vim中解决这个问题，很简单，在Vim中利用替换功能就可以将&#8220;</span><span style="color: #000000;">^</span><span style="color: #000000;">M&#8221;都干掉，键入如下替换命令行：<br>:</span><span style="color: #000000;">%</span><span style="color: #000000;">s</span><span style="color: #000000;">/^</span><span style="color: #000000;">M</span><span style="color: #008000;">//</span><span style="color: #008000;">g</span><span style="color: #008000;"><br></span><span style="color: #000000;">注意：上述命令行中的&#8220;</span><span style="color: #000000;">^</span><span style="color: #000000;">M&#8221;符，不是&#8220;</span><span style="color: #000000;">^</span><span style="color: #000000;">&#8221;再加上&#8220;M&#8221;，而是由&#8220;Ctrl</span><span style="color: #000000;">+</span><span style="color: #000000;">v&#8221;、&#8220;Ctrl</span><span style="color: #000000;">+</span><span style="color: #000000;">M&#8221;键生成的</span></div>
<br><img src ="http://www.cppblog.com/toMyself/aggbug/96241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-09-15 17:19 <a href="http://www.cppblog.com/toMyself/archive/2009/09/15/96241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>scp，复制远程机器上的文件到本地</title><link>http://www.cppblog.com/toMyself/archive/2009/09/15/96237.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Tue, 15 Sep 2009 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/09/15/96237.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">scp&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">P&nbsp;port&nbsp;ip:</span><span style="color: #000000;">/</span><span style="color: #000000;">data</span><span style="color: #000000;">/</span><span style="color: #000000;">filename&nbsp;&nbsp;.&nbsp;</span></div>
<br> <img src ="http://www.cppblog.com/toMyself/aggbug/96237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-09-15 17:11 <a href="http://www.cppblog.com/toMyself/archive/2009/09/15/96237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>makefile</title><link>http://www.cppblog.com/toMyself/archive/2009/03/05/75636.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Thu, 05 Mar 2009 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/03/05/75636.html</guid><description><![CDATA[# ./configure　配置<br># make 编译<br># make install 安装
<img src ="http://www.cppblog.com/toMyself/aggbug/75636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-03-05 15:35 <a href="http://www.cppblog.com/toMyself/archive/2009/03/05/75636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vim_plugin</title><link>http://www.cppblog.com/toMyself/archive/2009/03/05/75635.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Thu, 05 Mar 2009 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/03/05/75635.html</guid><description><![CDATA[<p>vim &amp; Cscope，ctags features<br>Emacs的一些辅助插件：cscope，cedet+ecb，session，doxymacs&nbsp; (跳转到定义、实现，自动补齐)<br>配置emacs：在C盘根目录下建立一个.emacs文本文件，输入配置内容。</p>
<p><br>要为整个系统安装 Vim 还是为单个用户，Vim 安装的路径不同。<br>&nbsp;如果你想安装在自己的 home 目录，编辑 Makefile 并查找这样的一行:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #prefix = $(HOME) <br>&nbsp;把行首的那个 # 去掉。<br>&nbsp;&nbsp; &nbsp;当你要为整个系统安装的时候，Vim 很可能已经为你选择好了一个合适的安装目录。<br>你也可以照下面讲的自己选择一个，但你必须先改变身份为 root。<br>/usr/share/vim/vim70/plugin<br>/usr/share/vim/vim72/plugin<br>/usr/local/share/vim/vim71/plugin<br>$$HOME/.vimrc<br>cp /usr/local/share/vim/vim64/vimrc_example.vim ~/.vimrc</p>
<p>PS:在~/.vimrc添加亦可.<br>let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"<br>Ubuntu下的C/C++环境搭建：vim + engspchk（英文拼写检查），calendar（日历显示），project（文件的&#8220;项目&#8221;管理）， taglist（源代码结构浏览），cvsmenu（CVS集成），doxygen（文档注释语法加亮），matrix（！）。<br>vim+ctags+taglist+cscope+cppcomplete+global<br>&#8220;:Project&#8221;即可打开一个用户的&#8220;项目文件&#8221;（~/.vimprojects）。项目文件采用普通的文本文件的形式，非常易于浏览和修改。<br>cppcomplete 需要ctags的支撑，可以补全类型或者函数名（可不是普通Ctrl+P/N的那种）<br>ctags -R --c++-kinds=+p --fields=+ia --extra=+q -f ~/.vim/systags /usr/include /usr/local/include </p>
<p><br>大型程序一定要global的参与，它的分析比较全面，但在vim中的提示信息有限。<br>taglist 精干，需要ctags的支撑 ，直接可以在左边列出函数列表，全局参数列表。（可以排序）<br>cscope 比较强大，可以对函数以及部分类型定义进行跳转，但有些BUG，好像在某些条件下无法正确找到分析枚举的定义。<br>cppcomplete 需要ctags的支撑，可以补全类型或者函数名（可不是普通Ctrl+P/N的那种）<br>global 新版本可以嵌入vim使用，提供比较完整解析和类型索引，和cscope比，稍微差些的就是对类型引用的打印列表中没有标识这个引用在什么函数中进行的。其实我的感觉global可能不是为vim所生，它的主要目的是用html的方式进行表达相关的关联关系和索引，使用起来感觉没有cscope的那么贴切。</p>
<p>global安装后扩展文件在:<br>/usr/share/doc/global/examples/gtags.vim.gz <br>需要拷贝到$HOME/.vim/plugin后解压，解压方法：<br>gzip -d&nbsp; gtags.vim.gz</p>
<p>gd转到当前光标所指的局部变量的定义<br>*&nbsp; 转到当前光标所指的单词下一次出现的地方<br>#&nbsp; 转到当前光标所指的单词上一次出现的地方<br>:tag startlist这个命令会找到函数 "startlist"，即使该函数是在另一个文件中。<br>"Ctrl-]", "g Ctrl-]", 用"Ctrl-o"退回原来的地方</p>
<p>Ctags升级后，使用&#8220;ctags &#8211;R&#8221;更新一下标签文件，现在再进入VIM就可以在C程序中全能补全了。我们依旧以VIM 7.0的源代码为例。<br>例如，我们在VimMain()函数中，输入&#8220;gui&#8221;三个字符，然后按下&#8220;CTRL-X CTRL-O&#8221;</p>
<p>omni completion (全能补全)<br>set tag+=/usr/lib/gcc/i686-pc-cygwin/3.4.4/include<br>set tag+=/usr/include</p>
<img src ="http://www.cppblog.com/toMyself/aggbug/75635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-03-05 15:34 <a href="http://www.cppblog.com/toMyself/archive/2009/03/05/75635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存越界和泄露调试工具</title><link>http://www.cppblog.com/toMyself/archive/2009/03/04/75490.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Wed, 04 Mar 2009 03:13:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/03/04/75490.html</guid><description><![CDATA[<p>1，valgrind的官方网址是：<a href="http://valgrind.org/">http://valgrind.org</a> 。你可以在它的网站上下载到最新的valgrind，它是开放源码和免费的。<br>valgrind包含几个标准的工具，它们是： 1、memcheck 2、cachegrind 3、helgrind <br>Valgrind用法(memory leak check) <br>valgrind [valgrind-option] program [program-args]<br>它的参数中可以用--tool=toolname指定使用什么工具如:<br>valgrind -tool=memcheck,如不指定,默认使用memcheck.<br>检查内存错误要在上面的输出中看两个关键字<br>ERROR SUMMARY 和 LEAK SUMMARY<br>valgrind &#8211;tool=memcheck &#8211;leak-check=yes [command] [para]<br>常用的options:<br>-v&nbsp;&nbsp;&nbsp;&nbsp; 更详细的信息, 增加错误数统计。<br>--leak-check=no|summary|full 要求对leak给出详细信息?<br>--log-file= 将输出的信息写入到filename.PID的文件里，PID是运行程序的进行ID<br>--tool= 运行 valgrind中名为toolname的工具。默认memcheck。<br><br>Valgrind 使用<br>用法: valgrind [options] prog-and-args [options]: 常用选项，适用于所有Valgrind工具</p>
<p>&nbsp;&nbsp; 1.-tool= 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。<br>&nbsp;&nbsp; 2.h &#8211;help 显示帮助信息。<br>&nbsp;&nbsp; 3.-version 显示valgrind内核的版本，每个工具都有各自的版本。<br>&nbsp;&nbsp; 4.q &#8211;quiet 安静地运行，只打印错误信息。<br>&nbsp;&nbsp; 5.v &#8211;verbose 更详细的信息, 增加错误数统计。<br>&nbsp;&nbsp; 6. -trace-children=no|yes 跟踪子线程? [no]<br>&nbsp;&nbsp; 7. -track-fds=no|yes 跟踪打开的文件描述？[no]<br>&nbsp;&nbsp; 8.-time-stamp=no|yes 增加时间戳到LOG信息? [no]<br>&nbsp;&nbsp; 9.-log-fd= 输出LOG到描述符文件 [2=stderr]<br>&nbsp; 10.-log-file= 将输出的信息写入到filename.PID的文件里，PID是运行程序的进行ID<br>&nbsp; 11.-log-file-exactly= 输出LOG信息到 file<br>&nbsp; 12.-log-file-qualifier= 取得环境变量的值来做为输出信息的文件名。 [none]<br>&nbsp; 13.-log-socket=ipaddr:port 输出LOG到socket ，ipaddr:port</p>
<p>LOG信息输出</p>
<p>&nbsp;&nbsp; 1.-xml=yes 将信息以xml格式输出，只有memcheck可用<br>&nbsp;&nbsp; 2.-num-callers= show&nbsp; callers in stack traces [12]<br>&nbsp;&nbsp; 3.-error-limit=no|yes 如果太多错误，则停止显示新错误? [yes]<br>&nbsp;&nbsp; 4. -error-exitcode= 如果发现错误则返回错误代码 [0=disable]<br>&nbsp;&nbsp; 5.-db-attach=no|yes 当出现错误，valgrind会自动启动调试器gdb。[no]<br>&nbsp;&nbsp; 6.-db-command= 启动调试器的命令行选项[gdb -nw %f %p]</p>
<p>适用于Memcheck工具的相关选项：</p>
<p>&nbsp;&nbsp; 1.-leak-check=no|summary|full 要求对leak给出详细信息? [summary]<br>&nbsp;&nbsp; 2.-leak-resolution=low|med|high how much bt merging in leak check [low]<br>&nbsp;&nbsp; 3.-show-reachable=no|yes show reachable blocks in leak check? [no]</p>
<p>valgrind &#8211;-tool=memcheck --trace-children=yes --log-file=./leak.out --error-limit=no --leak-check=full ./test <br>valgrind --leak-check=full --show-reachable=yes --trace-children=yes&nbsp; ./test<br>在杀掉进程（Ctrl+C等）之后，结果才能出来。</p>
<p><br></p>
<p>valgrind --leak-check=full --show-reachable=yes --trace-children=yes --xml=yes --log-file="log.xml" ./a.out
<br></p>
<p><br>jiffer blog： <a href="http://blog.sina.com.cn/linux114">http://blog.sina.com.cn/linux114</a></p><img src ="http://www.cppblog.com/toMyself/aggbug/75490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-03-04 11:13 <a href="http://www.cppblog.com/toMyself/archive/2009/03/04/75490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn</title><link>http://www.cppblog.com/toMyself/archive/2009/03/04/75483.html</link><dc:creator>kongkongzi</dc:creator><author>kongkongzi</author><pubDate>Wed, 04 Mar 2009 02:33:00 GMT</pubDate><guid>http://www.cppblog.com/toMyself/archive/2009/03/04/75483.html</guid><description><![CDATA[$ svn diff --revision PREV:COMMITTED foo.c # shows the last change committed to foo.c<br>$ svn log --revision HEAD # shows log message for the latest repository commit<br>$ svn diff --revision HEAD # compares your working file (with local changes) to the latest version in the repository 
<img src ="http://www.cppblog.com/toMyself/aggbug/75483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/toMyself/" target="_blank">kongkongzi</a> 2009-03-04 10:33 <a href="http://www.cppblog.com/toMyself/archive/2009/03/04/75483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>