相信很多喜欢Java的人对eclipse都情有独钟。NS2程序的调试,可以用打印命令调试,这样太繁琐。也可以用gdb调试,个人觉得上手比较困难。相信各位学习NS2的新手,在看代码的时候,很多的函数或者变量,都不知道在哪里声明的,就会在程序中开始使用,往往令我们很困惑。

调试、阅读代码的烦恼,那么让eclipse来帮你解决吧

1、下载eclipse并安装CDT插件。CDT插件使得eclipse可以创建C、C++工程。下载CDT插件的时候注意和 clipse版本匹配。当然你也可以到eclipse的官方网站,直接下载一个专门开发C、C++的eclipse版本。这样就不用安装CDT插件了。

2、安装ns后,并不能调试ns,因为在安装时的编译链接操作并没有将调试信息加入到可执行文件ns中,此时的ns文件只有5M多大小。要调试ns,需要将调试信息加入到ns文件中,这就要修改Makefile文件,使其中的gcc命令加入-g选项,但这不需要手动修改,具体操作如下:

进入ns-allinone-2.27./ns2.27目录,执行命令
./configure --enable-debug
此操作会生成新的Makefile,查看新Makefile文件中的编译命令会发现增加了-g选项。增加了调试信息的ns文件有15M大小

3、在eclipse中,依次选择[File -> New -> Project -> C++ project -> Makefile project ]。填入Project 名称NS-2.27。将Use Default Location 的勾去掉。然后将Location 設成Makefile 所在的目录NS2.27。在toolchains中要选择Cygwin GCC。之后点击finish。

4、大功告成,这时候你可以查看eclipse的控制台Console,里面在疯狂的显示eclipse编译NS2的相关信息。貌似就是在Make。

5、如果很不幸,eclipse编译后出现3个错误,第一个错误是关于找不到namespace CPP_NAMESPACE,第二个、第三个……。下面教你修复这个错误,进入NS2 2.27目录,打开autoconf.h文件。将以下内容替换:

/* stl */
#ifdef __cplusplus
#define HAVE_STL 1

#define CPP_REQUIRES_NAMESPACE 1
#ifdef CPP_REQUIRES_NAMESPACE
using namespace CPP_NAMESPACE;
#endif /* CPP_NAMESPACE */
#endif /* __cplusplus */

替换为:

/* stl */
#ifdef __cplusplus
#define HAVE_STL 1
#define CPP_NAMESPACE std

#define CPP_REQUIRES_NAMESPACE 1
#ifdef CPP_REQUIRES_NAMESPACE
using namespace CPP_NAMESPACE;
#endif /* CPP_NAMESPACE */
#endif /* __cplusplus */

6、在Cygwin窗口重新make。在eclipse中NS2工程上右键-built configuration-build-all 。这次真的大功告成,如果还问题,我也没碰到,自己解决吧。

此后你看NS2 C++代码的时候,如果想看哪个变量或者方法的定义,就可用通过eclipse方便的找到。注意F3键的使用哟~~~

据说 Eclipse下图形界面下调试项目要比直接用gdb调试要方便的多。

最后:若果你不带tcl文件作为参数运行的时候,如果在console 输入puts “Hello world”等命令不能正确执行的话,在Run Configuration里面设置一个path路径,指向cygwin的bin目录。之后运行就可以了。祝好运~~~

【NS2】用eclipse调试NS2(转载)的更多相关文章

  1. 【NS2】TCL debug (转载)

    1.使用NS2进行模拟,就不可避免的会接触TCL/OTCL和C/C++.两者配合使用.一般设置场景啊,业务流啊,都使用TCL/OTCL来编写脚 本.要进行路由实验模拟的话,同一类的实验,这些脚本基本上 ...

  2. 【NS2】NS2修改MAC协议(转载)

    NS2版本:2.34   涉及NS2代码文件: ns-2.34/mac/channel.h ns-2.34/mac/channel.cc ns-2.34/mac/wireless-phyExt.h n ...

  3. eclipse调试(debug)的时候,出现Source not found,Edit Source Lookup Path,一闪而过

    问题描述 使用Eclipse调试代码的时候,打了断点,经常出现Source not found,网上找了半天,大部分提示点击Edit Source Lookup Path,添加被调试的工程,然而往往没 ...

  4. eclipse调试solr

    eclipse调试solr 现在solr的源码包,我这里是4.10.2, 编译, ant ivy-bootstrap ant eclipse 导入elipse,将solr/example/solr/下 ...

  5. Eclipse 调试的时候Tomcat报错启动不了

    Eclipse 调试的时候Tomcat报错启动不了 1.把所有的断点删掉 2.清理工程 3.在Tomcat里面删除项目 4.删除Tomcat的配置,重新配置一下

  6. Eclipse调试常用技巧(转)

    Eclipse调试常用技巧 转自http://daimojingdeyu.iteye.com/blog/633824 1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就 ...

  7. Eclipse调试时Application XXX is waiting for the debugger to attach的提示

    原文链接: http://blog.csdn.net/star_huang/article/details/7678845 最近Eclipse调试时总是出现Application XXX  is wa ...

  8. eclipse调试jdk源码

    摘要 介绍使用eclipse调试jdk源码 java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而在debu ...

  9. linux + ffmpeg + eclipse 调试

    使用linux + ffmpeg + eclipse调试步骤OS : ubuntu 12.04Eclipse : 3.7.2 为Eclipse安装cdt插件,使其支持c/c++ 导入ffmpeg项目 ...

随机推荐

  1. hdu4565

    #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #inc ...

  2. Ubuntu修改mysql编码格式

    今天在Ubuntu系统上部署了第一个net core的web网站,遇到了mysql入库数据乱码的情况.无奈,ubuntu系统不熟悉,mysql命令不熟悉,只得在网上查找各种资料.还是老规矩,主要参考的 ...

  3. 基于RBAC权限管理的后台管理系统

    在摸爬滚打中渐渐理解了RBAC权限管理是个什么玩意. RBAC的基本概念: **RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三元 ...

  4. [转]web计时机制——performance对象

    页面性能一直都是Web开发人员比较关注的领域.但在实际应用中,度量页面性能的指标,是javascript的Date对象.Web Timing API改变了这个局面,让开发人员通过javascript就 ...

  5. 从页面获取form表单提交的数据

    1 使用HttpServletRequest,方便灵活 页面代码,使用action提交一个表单,里边有球的id,球的主人,球的颜色,所在省份,区域 <form action="ball ...

  6. pycharm最新激活码2017

    最新的2017激活码 BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZW ...

  7. python之特点

    .python区分大小写:2.注释规范:python使用井号#作为单行注释,且注释的位置,一般放在要注释代码的前一行或这代码的右侧:多行注释则可以用连续三个单引号开始一行,并连续三个单引号在要注释的代 ...

  8. Spring Boot → 08:嵌入式Servlet容器自定义

    Spring Boot → 08:嵌入式Servlet容器自定义

  9. Linux常用命令5 用户管理命令

    1.用户管理命令:useradd 所在路径:/usr/bin/useradd      执行权限:root 语法:useradd 用户名 功能描述:添加新用户 例如:useradd hzw userd ...

  10. mkdir、touch、rm和rmdir命令

    一.mkdir命令 mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录:如果给出了一个已经存在的路径,将 ...