タグ付けされた質問 「error-handling」

3
initファイルのエラーを適切に処理する方法
initファイルを実行するときにエラーをキャッチし、それを適切に処理する方法が必要です。私の最も重要なカスタマイズとキーバインドの多くは、他の設定がそれらの上に適用されないようにするために、initファイルの最後に表示されます。問題は、初期化が早期に中止されると、馴染みのあるキーバインディングと設定を適用せずに問題をデバッグしようとすると、完全に不自由に感じることです。 エラーが発生したときに初期化プロセスを正常に終了する方法はありますか?

3
エラー時に行番号を表示
emacsが私には理解できないエラーを投げるとします。または、「変数としてのシンボルの値はvoid:モードです」というエラーが表示される場合もありますがmodes、コードにはシンボルが多数出現するため、コンテキストが必要です。Emacsを設定して、Lispコードの行番号を指定して、エラーの原因となっているコードを知ることができますか? 私がやって試してみました(setq stack-trace-on-error '(buffer-read-only))とスタックトレースを取得するための努力の犯したコードを実行しました。スタックトレースもありません。 またedebug-defun、関数を呼び出して、ステップスルーすることも試みました。エラーがスローされるのは、関数から抜け出すまでではありません。 (私は現在、elispの一般的なデバッグスキルを開発しているので、現在直面している特定のエラーの原因にはあまり興味がありません。行番号、sexp、またはスタックトレースを取得する方法についてアドバイスしてください。エラー。)

1
プログラムからエラーからバックトレースを取得する
エラーがEmacs Lispのコードに合図し、されている場合debug-on-errorでt、私はエラーが発生した場所、それが簡単に把握することができますバックトレースバッファを取得します。ただし、ネットワークからの応答を非同期で処理しているときに発生するエラーの場合、バックトレースバッファーをポップアップ表示するのは面倒なので、エラーをキャッチしcondition-caseてログに記録します。 だから、でエラーを処理しているときに、エラーcondition-caseのポイントでバックトレースにアクセスする方法はありますか?backtrace関数を呼び出すと、ハンドラー内のコードのバックトレースが取得されますが、これは私が探しているものではありません。 (condition-case e (do-something-that-might-fail) (error (message "%s" ;; This gets the wrong backtrace! (with-temp-buffer (let ((standard-output (current-buffer))) (backtrace) (buffer-string))))))

2
Emacs Lispでのエラーの再スロー
関数を呼び出して、関数が失敗した場合にのみクリーンアップを実行し、エラーを再起動する必要があります。これが疑似コードです: (condition-case err (call-function) (error (cleanup) ;; how do I raise `err`? ))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.