(转)使用GDB调试NS2程序

2024-01-25 12:18
文章标签 使用 程序 调试 gdb ns2

本文主要是介绍(转)使用GDB调试NS2程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

gdb调试工具类似于vc中的debug工具。目前有命令行的和窗口界面的。窗口界面是DDD。我只用了命令行的。

用gdb调试ns2,要注意几点:
1,安装gdb,下载gdb包,安装了就是了。
2,改写Makefile,使之称为debug版本,具体做法:
在代码里面添加调试信息:修改Makefile(没有任何后缀的)将里面
CCOPT     #如果是ns-allinone-2.28,这里是CCOPT = -O2
STATIC 
LDFLAGS = $(STATIC)
LDOUT = -o $(BLANK)
改变为:
CCOPT = -g   #如果是ns-allinone-2.28,这里修改为 CCOPT = -O2 -g
STATIC 
LDFLAGS = $(STATIC)
LDOUT = -o $(BLANK)
修改的东西是粉红色字体所示
然后重新编译 
注意:以下步骤一个都不能少
Make clean 
Make depend
Make

3,调试:
建议把我们的测试脚本写在ns-allinone-2.**/ns-2.XX/mytclscript/下面
当调试时,首先进入ns-2.XX文件夹   [tengda@localhost ~]$ cd ns-allinone-2.31/ns-2.31/
然后 [tengda@localhost ns-2.31]$ gdb ns
之后会出现
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
 
(gdb) 
然后在该平台上运行我们的脚本,可以用cd 命令进入我们脚本所在文件夹。运行我们的脚本:
(gdb) run mbs.tcl

这样就可以进行调试了。具体调试过程与命令,我转载如下:

============================================

 

GDB(GNU 项目调试器)可以让您了解程序在执行时“内部” 究竟在干些什么,以及在程序发生崩溃的瞬间正在做什么。

GDB 做以下 4 件主要的事情来帮助您捕获程序中的 bug:

  • 在程序启动之前指定一些可以影响程序行为的变量或条件
  • 在某个指定的地方或条件下暂停程序
  • 在程序停止时检查已经发生了什么
  • 在程序执行过程中修改程序中的变量或条件,这样就可以体验修复一个 bug 的成果,并继续了解其他 bug

 

要调试的程序可以是使用 C、C++、Pascal、Objective-C 以及其他很多语言编写的。GDB 的二进制文件名是 gdb。

gdb 中有很多命令。使用 help 命令可以列出所有的命令,以及关于如何使用这些命令的介绍。下表给出了最常用的 GDB 命令。


表 1. gdb 中最常用的命令

命令 说明 例子
help 显示命令类别 help - 显示命令类别
help breakpoints - 显示属于 breakpoints 类别的命令
help break - 显示 break 命令的解释
run 启动所调试的程序 ?
kill 终止正在调试的程序的执行 通常这会在要执行的代码行已经超过了您想要调试的代码时使用。执行 kill 会重置断点,并从头再次运行这个程序
     
cont 所调试的程序运行到一个断点、异常或单步之后,继续执行 ?
info break 显示当前的断点或观察点 ?
break 在指定的行或函数处设置断点 break 93 if i=8 - 当变量 i 等于 8 时,在第 93 行停止程序执行
Step 单步执行程序,直到它到达一个不同的源代码行。您可以使用 s 来代表 step 命令 ?
Next 与 step 命令类似,只是它不会“单步跟踪到”子例程中 ?
print 打印一个变量或表达式的值 print pointer - 打印变量指针的内容
print *pointer - 打印指针所指向的数据结构的内容
delete 删除某些断点或自动显示表达式 delete 1 - 删除断点 1。断点可以通过 info break 来显示
watch 为一个表达式设置一个观察点。当表达式的值发生变化时,这个观察点就会暂停程序的执行 ?
where 打印所有堆栈帧的栈信息 where - 不使用参数,输出当前线程的堆栈信息
where all - 输出当前线程组中所有线程的堆栈信息
where threadindex - 输出指定线程的堆栈信息
attach 开始查看一个已经运行的进程 attach - 附加到进程 process_id 上。process_id 可以使用 ps 命令找到
info thread 显示当前正在运行的线程 ?
thread apply threadno command 对一个线程运行 gdb 命令 thread apply 3 where - 对线程 3 运行 where 命令
Thread threadno 选择一个线程作为当前线程 ?

转自: http://blog.sina.com.cn/s/blog_6074447a0100lldd.html

这篇关于(转)使用GDB调试NS2程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/643234

相关文章

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3

C# IPAddress 和 IPEndPoint 类的使用小结

《C#IPAddress和IPEndPoint类的使用小结》本文主要介绍了C#IPAddress和IPEndPoint类的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录一、核心作用网络编程基础类二、IPAddress 类详解三种初始化方式1. byte 数组初始化2. l

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达