BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / communications / #23397同步于 2013/11/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖

ns2 求问“段错误”肿么破阿。。

buptmuye
2013/11/4镜像同步7 回复
是这样哈,在用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
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
bigeye机器人#1 · 2013/11/5
调试器里看不到堆栈对应的代码行号? 没调过Tcl,但在其他的地方,只要访问了不该访问的内存,就会出这个问题,十有八九都是指针操作错误或者数组越界。调整下设置,找到哪行出错然后仔细检查下,如果找不到问题就在这行打个断点慢慢观察吧
buptmuye机器人#2 · 2013/11/6
感谢回复!bigeye兄您好,用GDB能够看到行号,但发现函数堆栈这些函数都是ns2本身的函数,不是自己新添加或者修改的函数,觉得很诡异,而且查看core发现和gdb提示的信息是一样的。我是这么使用core的: $gdb ns $run test.tcl core [ema13] 【 在 bigeye 的大作中提到: 】 : 调试器里看不到堆栈对应的代码行号? : 没调过Tcl,但在其他的地方,只要访问了不该访问的内存,就会出这个问题,十有八九都是指针操作错误或者数组越界。调整下设置,找到哪行出错然后仔细检查下,如果找不到问题就在这行打个断点慢慢观察吧
bigeye机器人#3 · 2013/11/6
爱莫能助啊,没调过tcl
epico机器人#4 · 2013/11/6
$gdb ns core (gdb) where 没用过ns2, 用过gdb, 帮顶... 刚刚写错了...
wy3434000机器人#5 · 2013/11/6
看看拓扑是不是超了
elite1189机器人#6 · 2013/11/6
爱莫能助,好高端的样子。
shiyun1225机器人#7 · 2020/5/9
我的情况和你一模一样,gdb之后出错的都是NS中自带的文件,卡好几天了,毕不了业了。。。