私はPerlプログラムでuse strict
を使用していますが、エラーは単一の違反行をリストするだけなので、それらのエラーは役に立ちません。厳密な使用が失敗した場合にバックトレースを取得する方法はありますか?Perlで深刻な参照違反のスタックトレースを取得できますか?
1
A
答えて
6
strict
プラグマには、すべての変数を宣言することを必要とするsubs
、およびvars
のカテゴリが含まれています。それらはコンパイル時にエラーです。これらのスタックトレースは、その行のソースコードから直接発生するため、有用ではありません。
refs
は、参照として文字列を禁止します。ランタイムエラーです。スタックトレースは、その文字列がどこから来たのかを理解するのに役立ちます。
スタックトレースを取得する方法の1つは、use Carp::Always
(またはコマンドラインフラグ:-MCarp::Always
)です。これにより、すべてのエラーと警告にスタックトレースが追加されます。すべてのエラーがずっと長くなるので、これをデバッグのヘルプとしてのみ使用することをお勧めします。
サブルーチンが無効な引数を受け取っているという問題がある場合は、入力を検証する方が良いかもしれません。例えば:
use Carp;
sub foo {
my ($ref) = @_;
# dies from the line where "foo()" was called
croak q(Argument "ref" must be a scalar reference)
unless ref $ref eq 'SCALAR' or ref $ref eq 'REF';
do_something_with($$ref);
}
Perlのオプション-MCarp=verbose
を添加することによりCarp
(例えばcroak()
またはconfess()
)がスタックトレースを強制することができるからの機能のいずれかを使用。
関連する問題
- 1. 参照から参照を含む配列へのハッシュを取得するPerl
- 2. PowerShellで詳細なスタックトレースを取得できますか?
- 3. Go:スライスで範囲を使用できますが、参照を取得できますか? (反復)
- 4. オブジェクトの参照カウントを取得できますか?
- 5. 参照元を取得できますか?
- 6. スタックトレースから実際のタイプを取得できますか?
- 7. バイナリライブラリのクラッシュからスタックトレースを取得できますか?
- 8. 反応中の参照を使わずに要素参照を取得する
- 9. 反応参照が機能しない不変の違反:addComponentAsRefTo
- 10. レンダリングエンジンへの参照を取得できませんでした
- 11. Perlハッシュ参照
- 12. jQueryでライブコレクションへの参照を取得することはできますか?
- 13. 既存のウィンドウへの参照を取得できません
- 14. Web参照とサービス参照の違いは何ですか?
- 15. "XXXX"への未定義参照を取得できません "
- 16. Microsoft.Office.Interopへの参照を取得できません
- 17. Perlでプリントを参照するには?
- 18. ドメインオブジェクトを削除するときに「参照整合性制約違反」を取得する
- 19. スパークログで完全なスタックトレースを取得
- 20. Postgresで参照テーブルを取得する
- 21. Oracle:PLSQLで参照を取得する
- 22. Googleシートで参照を取得する
- 23. 記憶参照の取得ができない、解決できない
- 24. ベクトル反復子が逆参照できないのはなぜですか?
- 25. 参照の値を取得します
- 26. 配列参照perlを印刷できません
- 27. このスタックトレースを取得するのはなぜですか?
- 28. Perlスクリプトログファイルのタイムスタンプを参照
- 29. Perlでsizeof(Cのバイト長)を取得できますか?
- 30. PerlでディレクトリのMD5sumを取得できますか?
'Carp :: cluck'と' Carp :: confess'は常にスタックトレースを出力します。 – mob