返回信息流是这样哈,在用ns2仿真tcl脚本的过程中突然abort提示“段错误”。
用GDB调试定位到代码段,发现这个“段错误”不是一开始就有,而是运行一段时间后才出现,就如同内存泄漏宕机。
出错的地方是ns2中trace部分的代码,参考ns manual也没有详细的教程阿。[ema1]
不知道如何拯救“段错误”,有没有深入ns2代码的教程书阿?哪位大哥大姐指点下如何调试这种“段错误”?莫非只有一行行代码读着理解着,ns2这么繁杂,加上之前CRCN扩展包的代码,给跪的节奏?[ema23]
tcl脚本如下:
set val(chan) Channel/WirelessChannel ; #Channel Type
set val(prop) Propagation/TwoRayGround ; #Radio propagation model
set val(netif) Phy/WirelessPhy ; #Network interface type
set val(ant) Antenna/OmniAntenna ; #Antenna model
set val(rp) AOMDV ;#Routing Protocol
set val(ifq) Queue/DropTail/PriQueue ;# interface queue type
set val(ifqlen) 50 ;# max packet in ifq
set val(mac) Mac/802_11 ;# MAC type
set val(ll) LL ;# link layer type
set val(nn) 50 ;# number of mobilenodes
set val(ni) 3 ;# number of interfaces
set val(channum) 2 ;# number of channels per radio
set val(cp) ./random50100.tcl ; # topology traffic file
set val(stop) 100 ;# simulation time
# ==================================================================
# Main Program
# ======================================================================
# Initialize Global Variables
set ns_ [new Simulator]
set tracefd [open ./50100.tr w]
$ns_ trace-all $tracefd
# set up topography object
set topo [new Topography]
$topo load_flatgrid 1000 1000
#create nam
set namtrace [open ./50100.nam w]
$ns_ namtrace-all-wireless $namtrace 1000 1000
# Create God
set god_ [create-god $val(nn)]
# configure node
$ns_ node-config -adhocRouting $val(rp) -llType $val(ll) -macType $val(mac) -ifqType $val(ifq) -ifqLen $val(ifqlen) -antType $val(ant) -propType $val(prop) -phyType $val(netif) -topoInstance $topo -agentTrace ON -routerTrace ON -macTrace ON -movementTrace ON
for {set i 0} {$i < [expr $val(ni) * $val(channum)]} {incr i} {
set chan_($i) [new $val(chan)]
}
#configure for interface and channel
$ns_ node-config -ifNum $val(ni) -channel $chan_(0)
$ns_ node-config -ChannelNum $val(channum)
for {set i 0} {$i < [expr $val(ni) * $val(channum)]} {incr i} {
$ns_ add-channel $i $chan_($i)
}
for {set i 0} {$i < $val(nn) } {incr i} {
set node_($i) [$ns_ node]
$node_($i) set recordIfall 1
$node_($i) random-motion 0 ;# disable random motion
$god_ new_node $node_($i)
}
source $val(cp) ; #source topology and traffic file generated by others
# Tell nodes when the simulation ends
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at $val(stop).0 "$node_($i) reset";
}
$ns_ at $val(stop).0002 "puts \"NS EXITING...\" ; $ns_ halt "
proc stop {} {
global ns_ tracefd
$ns_ flush-trace
close $tracefd
exec nam ./test.nam &
exit 0
}
puts "Starting Simulation..."
$ns_ run
这是一条镜像帖。来源:北邮人论坛 / communications / #23397同步于 2013/11/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖
ns2 求问“段错误”肿么破阿。。
buptmuye
2013/11/4镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
调试器里看不到堆栈对应的代码行号?
没调过Tcl,但在其他的地方,只要访问了不该访问的内存,就会出这个问题,十有八九都是指针操作错误或者数组越界。调整下设置,找到哪行出错然后仔细检查下,如果找不到问题就在这行打个断点慢慢观察吧
感谢回复!bigeye兄您好,用GDB能够看到行号,但发现函数堆栈这些函数都是ns2本身的函数,不是自己新添加或者修改的函数,觉得很诡异,而且查看core发现和gdb提示的信息是一样的。我是这么使用core的:
$gdb ns
$run test.tcl core
[ema13]
【 在 bigeye 的大作中提到: 】
: 调试器里看不到堆栈对应的代码行号?
: 没调过Tcl,但在其他的地方,只要访问了不该访问的内存,就会出这个问题,十有八九都是指针操作错误或者数组越界。调整下设置,找到哪行出错然后仔细检查下,如果找不到问题就在这行打个断点慢慢观察吧