当前位置: 代码迷 >> C语言 >> 曾经遇到的最郁闷的一次程序调试
  详细解决方案

曾经遇到的最郁闷的一次程序调试

热度:582   发布时间:2008-06-15 10:35:43.0
软件集成开发环境(代码编辑、浏览、编译、调试)
Emacs                          http://www.gnu.org/software/emacs/
Source-Navigator 5.2b2         http://sourceforge.net/projects/sourcenav
Anjuta                         http://anjuta.sourceforge.net(可用yum安装)
代码索引工具
Cscope                         http://cscope.sourceforge.net/
KScope                         http://www.kde-apps.org
GLOBAL                         http://www.gnu.org/software/global/(可用yum安装)
调试器(GNU gdb的GUI前端)
DDD                            http://www.gnu.org/software/ddd/
Insight 6.4.0                  http://sourceware.org/insight/
KDbg                           http://www.kdbg.org/
评测器(内存、性能、覆盖等的profiler,类似IBM Purify)
Valgrind                       http://www.valgrind.org/,FC5自带3.1.0-2
ggcov(GNU gcov的GUI)           http://ggcov.sourceforge.net/
kprof(GNU gprof的GUI)          http://kprof.sourceforge.net/
KCachegrind                    http://kcachegrind.sf.net
BoundsChecking               http://www.doc.ic.ac.uk/~phjk/BoundsChecking
代码静态检查工具(类似Windows平台的PC-Lint)
Splint                       http://www.splint.org/(可用yum安装)
flawfinder                   http://www.dwheeler.com/flawfinder/
代码静态测量工具
--暂缺,Windows上非开源的LineCount(http://liangs.autodebug.com/)统计C/C++/Java代码还凑合。
PyMetrics(http://sourceforge.net/projects/pymetrics/)测量Python代码复杂度。
http://www.chris-lott.org/resources/cmetrics/罗列了好些C static metric tools。
软件构建系统(build system)
SCons            http://www.scons.org/(用yum安装的版本太低)
CMake            http://www.cmake.org/
GNU Make        http://www.gnu.org/software/make/
交叉工具链
crosstool         http://www.kegel.com/crosstool/
代码版本控制系统及相关工具
Subversion         http://subversion.tigris.org (用yum安装)
WorkBench         http://pysvn.tigris.org/(pysvn的附带物)
StatSvn            http://svn.statsvn.org/
mpy-svn-stats        http://mpy-svn-stats.berlios.de/
ViewVC            http://viewvc.tigris.org/
测试框架
CppUnit            http://sourceforge.net/projects/cppunit
CUnit            http://cunit.sourceforge.net/
代码差异工具(比较/制作和应用补丁)
GNU diffutils        http://www.gnu.org/software/diffutils/
kdiff3            http://kdiff3.sourceforge.net/或者http://www.kde-apps.org(可用yum安装)
代码在线文档
doxygen            http://www.stack.nl/~dimitri/doxygen/
离线文档
DocBook            http://www.docbook.org
XMLMind            http://www.xmlmind.com/
代码格式化
astyle(Artistic Style)    http://astyle.sourceforge.net/
indent            http://www.gnu.org/software/indent/
UML建模
ArgoUML            http://argouml.tigris.org


软件工程事务(BUG等)跟踪(类似IBM ClearQuest)
Trac            http://trac.edgewall.org/(基于Pythyon,用yum安装)--感觉和BugFree一样小巧
BugFree            http://www.1zsoft.com/(基于PHP+MySQL)--中小规模软件适用
BugZilla        http://www.bugzilla.org/--配置复杂,使用麻烦
自动化持续构建与测试系统(类似IBM BuildForge)
BuildBot        http://buildbot.sourceforge.net/(基于Python)
Cabie            http://cabie.tigris.org/(基于Perl和MySQL)
系统级别测试框架
DejaGNU            http://www.gnu.org/software/dejagnu/(基于Expect,因而基于Tcl)
QMTest             http://www.codesourcery.com/qmtest/(基于Python)
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define MY_PRINT(i) \
do {\
    printf("%d\n", i);\
} while(0)
int main()
{
    int i=9;
    MY_PRINT(i);
    return 0;
}
在那里打个空格就可以了,为什么?
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define MY_PRINT(i) \    //*呀,这里怎么有个()还有个/啊?*//
do {\                    //*这里怎么也有个/啊?它起什么作用?*//
    printf("%d\n", i);\ //*这里也是,/是起什么作用?*//
} while(0)
int main()
{
    int i=9;
    MY_PRINT(i);
    return 0;
}
----------------解决方案--------------------------------------------------------
带参数的宏加分行
它相当于
#define MY_PRINT(i) do {printf("%d\n", i);} while(0)
那样写好看,思路清晰。
----------------解决方案--------------------------------------------------------
嘿嘿,就是说“/”其实就没什么作用了?
问下,宏加了参数,有什么用?怎么使用啊?谢谢回复!
----------------解决方案--------------------------------------------------------
晕,书没看透的家伙。。和函数差不多,但又不太一样。。
自己看书,给你个例子
#define ADD(x) (x)+(x)    /* 带参数的宏 ,注意括号,为什么自己看书.*/
int main()
{int a=1,b=2,c;
c=3*(ADD(a+b));
printf("%d\n",c);
return 0;
}
随手写的,不知道有错没。。
----------------解决方案--------------------------------------------------------
呀,我看潭浩强的那本书,预处理命令和宏还没看到呢!
不过很谢谢你啊!呵呵!
你的程序是不是可以这样?
#define ADD(x) (x)+(x)     //*这里是不是有点错!如果是X+X的话,下面就是a+a了!*//
int main()
{int a=1,b=2,c;
c=3*(ADD(a));            //*是不是可以这样改?上面是x+x嘛!现在就是1+1了!你下面用a+b……*//
printf("%d\n",c);
return 0;
}
还有哦!
#include <stdio.h>
#define MY_PRINT(i) \         //这里宏有个参数
do {\
    printf("%d\n", i);\
} while(0)
int main()
{
    int i=9;
    MY_PRINT(i);    //调用的是MY_PRINT(9); 这个程序有什么用啊?怎么使用宏以后,什么都没有做,就返回0?
    return 0;
}
----------------解决方案--------------------------------------------------------
1、这里是别人的帖子。。。
2、我再说下去,宏那一章节你就不用看了,我也累死了
   看完书啥都明白了。
----------------解决方案--------------------------------------------------------
我收藏先,看完不懂的话,我在来问啊!LS的谢谢了啊!非常感谢!
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define MY_PRINT(i) do{printf("%d\n",i);}while(0)

int main()
{
    int i=9;
    MY_PRINT(i);
    return 0;
}
----------------解决方案--------------------------------------------------------
  相关解决方案