文档库 最新最全的文档下载
当前位置:文档库 › OPNET的ODB调试以及与VC联调

OPNET的ODB调试以及与VC联调

在OPNET下进行调试一共有两种方法(目前我所知道的):ODB 和 VC。

方式1:ODB
你可以通过查阅关键词 ODB 在 OPNET 的随机帮助文件中找到,我先大概说一
下,你可以在仔细地看文档。
在edit>preference中选择console_exit_pause的值为TRUE,这样仿真结束时就不会立刻退出ODB了。
在Configure/Run DES中,选择Execution目录下的OPNET Debugger,在右边属性中勾上Use ODB,ODB script mode可以选择Play,并指定script name。
运行仿真后,在任务栏开始的“运行”中,打开DOS画面。如果你有一个 Project1 文件,其中 Scenarios 名为Scn1,这样在 Dos 画面下运行 op_runsim ,命令如下
(C:\...:\)op_runsim -net_name Project1-Scn1 -debug
例如:op_runsim -net_name UVCommu-UVPTP -debug
(上面括号中的是Dos提示语,不用管,直接输后面的命令就行) 。
注意大小写,否则会找不到合适的文件。
可以设置断点、在 process 利用 op_prg_odb_print_major 将你需要的变量打
印到屏幕窗口。(设置断点的命令有 prostop,mstop 等等,在ODB环境下输入)

方式2:在 VC 环境下调试
对于OPNET 14.0版本来说,不用修改OPNET 中的 Preference 中的参数。
在运行仿真之前,选择Debugger,然后Run开始仿真。
打开DOS画面,执行op_runsim命令从而打开工程的ODB环境。
在任务管理器中选择op_runsim_dev.exe进程,右键选择“调试”,从而调出op_runsim_dev的VC界面。
(上一步也可以这样做:启动 VC++,菜单:Build->Start Debug->Attach to Process,在出现的界面中选中:op_runsim_dev.exe)
在File中选择需要设置断点的 process 的 C 代码程序,然后在需要的地方设置断点。
在 OPNET ODB 环境下输入命令cont或者c继续仿真,当仿真运行到上面所设的断点处,将会在VC环境下停下来。
这样就可以查看具体的想要观察的参数值了。

注1:
在VC调试时,从断点后开始单步运行,最后总会走到一个向汇编中的机器代码的地方。odb那边也不能敲任何命令。
这很正常,那个汇编的地方就是OPNET的内核之类的东西。不用管它,在VC里面再选Go(F5)就行了。
程序会运行到VC的下一个断点(如果只有一个断点就回调到这个唯一的断点处),或者ODB重新可以敲命令了。
注2:
OPNET中ODB与vc联合调试的一个问题:按照debugging.doc中的设置方法,确实可以在vc中设置断点调试,但是根本watch不到任何变量的内容老提示Cxx0017: Error symbole XXX not found怎么办?
你要观测的是State Variables吧?不能直接观测的。因为OPNET将所有State Variables封装在一个结构里,这个结构的指针名为op_sv_ptr。你观测的时候,可以观测op_sv_ptr,然后展开该指针,可以找到全部State Variables。这样要比在odb环境下方便得

多。
注3:
修改Simulation model的environment files时,一般不需将Force Compile设为enable,因为调试时一般process model都已编译好。如果把Force Compile设为enable的话,每次启动simulation都会把项目中包含的所有的process model重新编译,会耗很长时间。

(申明:我的用是OPNET 14.0版本,以上步骤就可以实现调试了。下面的可以不用再看。但是如果是低版本的,可以看一下。)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.OPNET与VC联调:
preference -> bind_shobj_flags的值后面加上 /DEBUG
preference -> comp_flags和comp_flags_cpp后面加上/Zi /Od
config simulation(advanced) -> Envirement files -> include两项:debug和force_compile
运行ODB,然后在VC下attach to process,添加op_runsim进程,开始联合调试。

方式2:在 VC 环境下调试 l

1。修改 OPNET 中的 Preference 中的参数:
菜单: Edit -> Preference,修改 bind_shobj_flags、comp_flags、comp_flags_cpp,
假设你将 OPNET 安装在缺生目录下
bind_shobj_flags: /LIBPATH:C:\Progra~1\7.0.B\sys\pc_intel_win32\lib /DEBUG
bind_shobj_flags_old: /LIBPATH:C:\Progra~1\7.0.B\sys\pc_intel_win32\lib //jiao add

comp_flags: -IC:\Progra~1\7.0.B\models\std\include /Od /Zi
comp_flags_old: /W3 -If:\PROGRA~1\OPNET\8.0.C\models\std\include//jiao add
comp_flags_cpp: -IC:\Progra~1\7.0.B\models\std\include /Od /Zi
comp_flags_cpp_old: /W3 -If:\PROGRA~1\OPNET\8.0.C\models\std\include//jiao add
(注意:Od 中的是字母 O,不是数字 0 )。
2。在你的 Project 中利用环境变量:
菜单:Simulation->Configure Simulation(Advanced),在出现的画面中点击
Environment files... 按钮,在出现的画面中将 debug 和 force_compile选择为
include ,保存后可以退出了。
3。然后运行你的仿真。
4。启动 VC++,菜单:Build->Start Debug->Attach to Process,在出现的界面
中选中: op_runsim_dev.exe 。
5。然后选择你希望设置断点的 process 的 C 代码程序。
6。在你需要的地方设置断点。
7。在 OPNET ODB 环境下输入命令 cont 或者 c 继续仿真,当仿真运行到步骤6所
设的断点处,将会在 VC 环境下停下来。这样就很方便地了解到变量的值等非常有
用的信息。

掌握一定的调试方法,对自己正确掌握 OPNET 很有帮助,也不至于出现了问题
一头抓瞎,如果还有什么问题,请 email: opnet_hit@https://www.wendangku.net/doc/7b947359.html, 或
opnet_hit@https://www.wendangku.net/doc/7b947359.html, (声明:我和 OPNET 没有任何关系。)


我的总结是基于那篇讲述VC调试的文档(debugging.doc),不一定正确,望大虾指正。
(1)修改Preference中的环境变量时,/Od与/Zi之间要有空格,另外注意O不是0。
(2)除了修改bind_shobj_flags、comp_flags、comp_flags_cpp外,还要修改bind_static_flags:

即后面添加/DEBUG。可以从文档中的示意图中看出。
(3)如出现上述设置上的问题,可以从编译结果中查看问题。(我的方法是故意在一个process model中加一条语法错误的语句,然后编译看列出的出错信息。)
(4)在attach process时,如果看不到任何process,尽量关闭不必要的程序,只留下opnet的project窗口和VC。
(5)修改Simulation model的environment files时,一般不需将Force Compile设为enable,因为调试时一般process model都已编译好。如果把Force Compile设为enable的话,每次启动simulation都会把项目中包含的所有的process model重新编译,会耗很长时间。
opnet中用VC调试经验总结




相关文档