0

実行時エラーが発生したときにMathematicaユーザーがコードをデバッグする方法に興味があります。Mathematicaは非常に強力なので、ほとんどのプログラミングタスクを置き換えられると思いますが、バグがあると、デバッグの不便さがその利点を相殺します。

私はWorkbenchを知っていますが、起動するのが面倒で、JavaベースのIDEのコンパイルは少し遅いです。

4

3 に答える 3

3

エコー機能が組み込まれ、エラーが発生した場所を追跡するのに非常に役立ちます。

"Echo[x_]:=Module[{},Print[x];x]"

説明用: モジュロ 4 を取った後、y に等しいリスト内の要素の数を見つける

input = Range@20;
target = 3;

foobar[list_, y_] := Length@Select[list, y == Mod[4, #] &]
foobar[input, target]

機能する範囲に複数の数値があるにもかかわらず、0 を返します。echo を使用してデバッグ用に foobar を変更する:

foobar[list_, y_] := Length@Select[list, y == Echo[Mod[4, #]] &]

Mod の引数が目的の効果から逆になっていることがすぐに明らかになります。

于 2016-11-06T22:56:37.883 に答える
1

TraceTracePrintはどちらも便利です。また、次のような未定義の呼び出しについて警告する「任意の引数」定義を定義することも好きです。

f[0] := 1
f[1] := 1
f[n_Integer?Positive] := (f[n]=f[n-1]+f[n-2])
f[wrong___] := ( Print["f had wrong arguments: ",{wrong}]; $Failed)

Workbench では、これらのエラー定義はブレークポイントに最適な場所です。

于 2012-12-22T15:06:56.437 に答える
0

特定の引数 (この関数に渡されたものなど) を使用したトレースは、1 つの便利なツールです。ただし、最も一般的な方法は、作業中のノートブックでコードの断片をただちに評価して、予期していなかった、またはラッピング コードが必要とする形になっていないことが最初に発生した場所を特定することです。これも役立ちます。最初からモジュール式のコードを書く場合。

于 2015-02-19T17:49:08.843 に答える