2016-09-05 4 views
0

私は問題をデバッグすることができませんでしたが、ラインで見ているクラスを呼び出すときにTCLとNS2"エラー。 私はtclファイルを実行していて、次のエラーを生成します。値をハードコードしていますが、それでも動作しません。なぜそれはnametraceラインが好きではないのですか?上記のコードを実行する

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が使用するオブジェクトシステム)では、スタックトレースはあまり有益ではありません。問題はSimulatorクラスのnamtrace-allwirelessメソッドの実装内で発生したか、実装にディスパッチしようとしたときに発生した可能性があります。どちらを言うのは難しい。 エラー報告を修正する必要があります。

Cからの報告エラーおよびC++

あなたがCまたはC++でメソッドの実装を書いた場合は、最も可能性の高い問題は、あなたがエラーにTclインタプリタの結果を設定していませんでしたということでしょうこの場合、TCL_ERRORを返す特定のパスのメッセージ。標準のTcl APIヘルパー関数はすべて、エラーを検出したときにそのすべてを設定します(場合によってはTCL_LEAVE_ERR_MSGフラグで尋ねられた場合のみ;これは変数アクセサに適用されます)が、あなたが作成したエラー検出された場合は、Tcl_SetResultまたはTcl_SetObjResultまたはTcl_AppendResultと呼ぶことによって、手動で行う必要があります。 Tclの

から報告

エラーあなたはTclでメソッドの実装を書いた場合、問題はデフォルト空の結果使用して、あなたはこれをやったことはおそらくです:

return -code error 

追加します最後に、エラーメッセージ:

return -code error "something bad happened" 

やメッセージを供給するために(そしてそれのために空の文字列を使用していない)あなたを強制的にerrorコマンドを使用します。


実際の問題の原因は不明です。私は容疑者それは間違ったスタックコンテキストの変数を解決している(そして、あなたはそれが発生したときにエラーを生成するようにコードを要求していない)か、エラー報告を修正すると明らかになるケースです。エラーを正しく解決することが重要です。

関連する問題