为了更好地使用Asterisk开发项目, 一个途径就是有针对性地学习、分析与项目有关的那部分asterisk源代码。虽然说代码是模块化的,但是赤手空拳地针对每个源文件进行学习,确实增加了一定的难度,如果能够借助某些工具来调试asterisk,将是多方便的一件事情呀!经过研究,终于把asterisk整个项目部署到了Linux下的netbeans <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.5.1</chsdate> IDE上了,通过这个IDE,我们可以进行asterisk源代码的学习、调试,这样一举两得的事情,何乐而不为呢?废话不多说了,下面开始我们的工作吧:
系统环境
Linux: ubuntu 7.04
IDE: Netbeans <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.5.1</chsdate> + C/C++ Pack+Subversion客户端插件
安装方法
l 安装Netbeans IDE
参照官网说明
http://www.netbeans.org/community/releases/55/1/install_zh_CN.html
l 安装C/C++ Development Pack
参照官网说明
http://www.netbeans.org/community/releases/55/1/cnd-install_zh_CN.html
添加asterisk项目到netbeans中
这一步是整个过程中最核心的一步,可以按下面的图示进行:
1. 使用netbeans,从服务器签出asterisk源代码到本地
(为了能从签出代码到本地然后以这个源代码创建netbeans项目,不要使用Linux安装了subversion后使用控制台以命令行的方式check out)

输入库的地址:http://svn.digium.com/svn/asterisk/trunk,点击下一步。

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 291pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="snapshot2"></imagedata></shape>
<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 291pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.jpg" o:title="snapshot2"><font size="3"></font></imagedata></shape>
下面这一向导保持默认选项即可。

<shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 316.5pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg" o:title="snapshot3"><font size="3"></font></imagedata></shape>
点击完成,等待从服务器接收完SVN库中的文件,接收完成后,将会弹出以下窗口:

<shape id="_x0000_i1028" style="WIDTH: 270pt; HEIGHT: 111.75pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image007.jpg" o:title="snapshot4"><font face="Times New Roman" size="3"></font></imagedata></shape>
选项第一个,进行下一步骤,创建项目,这时候弹出来下面的“新建项目“向导。
2. 创建Netbeans项目

在生成工具选项中,浏览从SVN服务器库中签出到本地的文件中的Makefile文件,选择它作为现有的Makefile文件。

<shape id="_x0000_i1030" style="WIDTH: 414.75pt; HEIGHT: 287.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image010.jpg" o:title="snapshot8"></imagedata></shape>
点击下一步,进入第3步,这一步可以保持默认
<shape id="_x0000_i1031" style="WIDTH: 414.75pt; HEIGHT: 287.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image012.jpg" o:title="snapshot9"></imagedata></shape>

点击下一步,进入第4步,也可以保持默认。
<shape id="_x0000_i1032" style="WIDTH: 414.75pt; HEIGHT: 287.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image014.jpg" o:title="snapshot10"></imagedata></shape>

<shape id="_x0000_i1033" style="WIDTH: 414.75pt; HEIGHT: 287.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image016.jpg" o:title="snapshot11"></imagedata></shape>
<shape id="_x0000_i1034" style="WIDTH: 414.75pt; HEIGHT: 287.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image018.jpg" o:title="snapshot12"></imagedata></shape>

点击下一步,进入最后一步,进行项目名称和位置的设置,在这里我保持了默认,大家可以重新设定名称。

到这里我们就已经把asterisk整个项目源代码导入到了netbeans中,并生成了本地项目。
接下来我们就可以像传统那样执行三部曲,安装asterisk到指定目录,我们可以在所签出到本地的asterisk项目源代码的目录下,在控制终端中执行./configure&make&make install等操作。对应的编译也可以在netbeans下右击项目,选项重要文件--->Makefile,右击执行make,在这之前也可以新添加configure文件到这个重要文件目录中。

<shape id="_x0000_i1035" style="WIDTH: 253.5pt; HEIGHT: 234.75pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image020.png" o:title="未命名"></imagedata></shape>
3. 当成功编译、安装asterisk后,就可以再回到netbeans进行asterisk的运行、调试了
在开始运行之前,需要指定启动asteriskc参数,右击项目,属性设置常规选项为-vvvvvvc
<shape id="_x0000_i1036" style="WIDTH: 414.75pt; HEIGHT: 311.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image022.jpg" o:title="snapshot20"></imagedata></shape>

在main函数中设置一个断点

<shape id="_x0000_i1037" style="WIDTH: 414.75pt; HEIGHT: 291pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image024.jpg" o:title="snapshot15"></imagedata></shape>
点击F5,或者选择运行菜单下的调试主项目选项启动调试
需要说明的是,因为启动asterisk后要往本地几个目录中写入几个文件,如asterisk.pid或者日志文件messages等,所以如果碰到了启动失败的提示后,到相应的目录chmod 777赋予写的权限。

<shape id="_x0000_i1038" style="WIDTH: 414.75pt; HEIGHT: 291pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image026.jpg" o:title="snapshot17"></imagedata></shape>
程序成功启动后,将在asterisk.c中的2610行的main()函数处停业,这也是asterisk的入门点,并弹出来程序终端,这也可以通过设置,在netbeans的输出控制台显示,但这样调试起来会不太方便,所以还是使用默认的,即Linux默认终端。如下图所示:
<shape id="_x0000_i1039" style="WIDTH: 414.75pt; HEIGHT: 311.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image028.jpg" o:title="snapshot19"></imagedata></shape>

假如我想看看asterisk的Dynamic Module Loader是如何装载如个模块,可以在loader.c的 load_module函数设置一个断点,当程序运行到此处时可以通过单步调试查看整个过程。
<shape id="_x0000_i1040" style="WIDTH: 414.75pt; HEIGHT: 311.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CGAOLIN~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image030.jpg" o:title="snapshot22"></imagedata></shape>

关于如何使用netbeans的Debug功能以及其它的功能,大家可以参看官方网址给出的文档:http://cnd.netbeans.org/docs/index.html
本文档只针对如何调试asterisk项目,有关asterisk方面的请参考其它文档。
Asterisk调试指南
本文介绍如何使用NetBeans IDE在Linux环境下配置并调试Asterisk项目。通过详细步骤指导读者从签出源代码到设置断点,实现对Asterisk核心功能的深入理解。
176

被折叠的 条评论
为什么被折叠?



