When using NS, we usually meet some hurdles, luckily the error message can help us to find where the mistake is.
错误代码从错误发生时开始输出,然后返回上一级调用,上一级可能继续返回错误代码的相关信息,最典型的模式是
1 "eval $self create-wireless-node $args" # 命令代码
2 (procedure "_o3" line 23) # 命令所在行数
3 (Simulator node line 23) # Simulator 实体的node函数体
4 invoked from within #
5 "$ns_ node" # 调用代码
此5行大体意思是, 1行对应的命令是从句柄为 "_o3"的Simulator实体的函数 node "函数定义"的第23行调用的
句柄说明
在每一个Simulator对应的模拟中"_o*"标示唯一的一个分裂类实体,也就是说,所有的分裂类实体都有自己的唯一标识详见《tclcl-1.19/tcl-object.tcl 代码分析 》
对于下面错误代码中提到的几个句柄说明如下:
_o3 是一个Simulator实例句柄, _o14是一个node实例句柄,_o17是一个agent实例句柄
错误例子:
INITIALIZE THE LIST xListHead
1 (_o17 cmd line 1)
2 invoked from within
3 "_o17 cmd port-dmux _o26"
4 invoked from within
5 "catch "$self cmd $args" ret"
6 invoked from within
7 "if [catch "$self cmd $args" ret] {
8 set cls [$self info class]
9 global errorInfo
10 set savedInfo $errorInfo
11 error "error when calling class $cls: $args" $..."
12 (procedure "_o17" line 2)
13 (SplitObject unknown line 2)
14 invoked from within
15 "$agent port-dmux $dmux_"
16 (procedure "_o14" line 11)
17 (Node/MobileNode add-target-rtagent line 11)
18 invoked from within
19 "$self add-target-rtagent $agent $port"
20 (procedure "_o14" line 23)
21 (Node/MobileNode add-target line 23)
22 invoked from within
23 "$self add-target $agent $port" //$self 调用类似于动态运行时
24 (procedure "_o14" line 15)
25 (Node attach line 15)
《attach 函数15行果然是"$self add-target $agent $port" ,计算行数不算注释,空格要算》
26 invoked from within
27 "$node attach $ragent [Node set rtagent_port_]" 此时 "$ node = = _o14"
28 (procedure "_o3" line 75)
29 (Simulator create-wireless-node line 75)
30 invoked from within
31 "_o3 create-wireless-node" // _o3 是Simulaor的一个实体句柄
32 ("eval" body line 1)
33 invoked from within
34 "eval $self create-wireless-node $args" #$self = = "-o3"
35 (procedure "_o3" line 23)
36 (Simulator node line 23)
37 invoked from within
38 "$ns_ node"
39 ("for" body line 2)
40 invoked from within
41 "for {set i 0} {$i < $val(nn) } {incr i} {
42 set node_($i) [$ns_ node]
43 $node_($i) random-motion 0;
44