2016-09-05 3 views
0

Я смотрел в строке, однако мне не удалось отладить мою проблему. Я запускаю файл tcl, и это приведет к следующей ошибке, я жестко закодировал значения, и это все еще не работает. Почему это не нравится линия надписи?

set val(rp)  AODV      ;# routing protocol 
set opt(x)  3500 
set opt(y)  2000 


set ns_  [new Simulator] 
set tracefd  [open map.tr w] 
$ns_ trace-all $tracefd 

set namf [open map.nam w] 
$ns_ namtrace-allwireless $namf opt(x) opt(y) 

Выполнение кода выше генерирует следующую ошибку

(_o3 cmd line 1) 
    invoked from within 
"_o3 cmd namtrace-allwireless file4 3500 2000" 
    invoked from within 
"catch "$self cmd $args" ret" 
    invoked from within 
"if [catch "$self cmd $args" ret] { 
set cls [$self info class] 
global errorInfo 
set savedInfo $errorInfo 
error "error when calling class $cls: $args" $..." 
    (procedure "_o3" line 2) 
    (SplitObject unknown line 2) 
    invoked from within 
"$ns_ namtrace-allwireless $namf $opt(x) $opt(y)" 
    (file "map.tcl" line 45) 

Кто-нибудь есть какие-либо идеи о том, почему ошибка бросают, и какие шаги я мог бы предпринять, чтобы отладить.

ответ

0

Ваш отчет аккуратно не содержит фактическое сообщение об ошибке и просто дает трассировку стека. К сожалению, для oTcl (объектная система, используемая NS2) трассировка стека не очень информативна; он просто говорит нам, что проблема возникла во внедрении метода namtrace-allwireless класса Simulator или, возможно, что это произошло при попытке отправки в реализацию. Трудно сказать, какой. Вам необходимо исправить свои сообщения об ошибках.

Ошибка репортаж с C и C++

Если вы написали реализацию метода в C или C++, то, скорее всего, вопрос будет то, что вы не установили результата интерпретатор Tcl ошибки сообщение на конкретном пути, который возвращается TCL_ERROR в этом случае. Стандартные вспомогательные функции API Tcl все устанавливаются, когда они обнаруживают ошибку (хотя в некоторых случаях только если задано с помощью флага TCL_LEAVE_ERR_MSG, это относится к переменным аксессурам), но и для ошибок, которые вы генерируете сами, потому что есть некоторые условия, вы должны сделать это «вручную», позвонив Tcl_SetResult или Tcl_SetObjResult или Tcl_AppendResult.

Ошибка репортаж с Tcl

Если вы написали реализацию метода в Tcl, проблема, вероятно, что вы сделали это, используя пустой результат по умолчанию:

return -code error 

Добавить сообщение об ошибке в конце:

return -code error "something bad happened" 

Или использовать error команду, которая заставляет вас ввести сообщение (и не использовать пустую строку для него).


Актуальная причина проблемы неизвестна. I подозревает, что он либо разрешает переменную в неправильном контексте стека (и вы не просили код генерировать ошибку для вас, когда это происходит), либо случай, когда это будет очевидно после исправления отчетов об ошибках. Правильно получить правильные ошибки.

Смежные вопросы