DevTools設(shè)定でAsync Stackトレースを有効にして、Promise.senのような非同期操作全體にコールスタックを保持し、待ち望んでいて、完全な実行チェーンを見ることができます。 2.非典型的な関數(shù)でブレークポイントを直接設(shè)定します。then()/。catch()コールバック、および式を待って変數(shù)を検査し、解決された約束値を表示します。 3.「例外を一時(shí)停止する」を使用し、「キャッチされた例外で「一時(shí)停止」して、黙って失敗する可能性のある非同期コードの未処理の約束の拒否とエラーをキャッチします。 4。アナックコールバックにconsole.trace()を挿入して、一時(shí)停止せずにasyncコールスタックとトレース実行フローをログに記録します。 5.タイミング測(cè)定にConsole.time()を使用して、タイミングと実行順序をより適切に解釈するために、タスク(例えば、SettimeOut)とマイクロタスク(Promise.then)のイベントループの區(qū)別を理解します。さらに、イベントリスナーのブレークポイントを使用して、非同期コードをトリガーするDOMまたはネットワークイベントを一時(shí)停止し、非同期操作の起源を追跡するのに役立ちます。 Asyncスタックを有効にし、例外で一時(shí)停止し、Console.trace()を使用すると、JavaScriptのほとんどの実際の非同期デバッグシナリオを効果的にカバーします。
JavaScriptで非同期コードをデバッグするのは難しい場(chǎng)合があります。コールバック、約束、非同期/待ち聲、およびイベントループにより、実行フローを追跡するのが難しくなります。 Chrome Devtoolsは、非同期コードを効果的にデバッグするのに役立つ強(qiáng)力な機(jī)能を提供します。それらを使用する方法は次のとおりです。

1.コールスタックとAsyncスタックトレースを使用します
Async機(jī)能をデバッグする場(chǎng)合、通常のコールスタックは、イベントループ境界でしばしば壊れている現(xiàn)在の同期コンテキストのみを表示します(例: Promise.then()
)。これにより、非同期操作がどこから発生したかを知ることが難しくなります。
asyncスタックトレースを有効にします:

- Chrome Devtoolsを開きます。
- 設(shè)定(ギアアイコン)→設(shè)定→ソースに移動(dòng)します。
- 「Async Stack Traces」を確認(rèn)してください。
有効になると、ChromeはsetTimeout
、 Promise.then
、 await
など、非同期操作全體にコールスタックを保存します。コードがどのようにブレークポイントに到達(dá)したかについて、より完全な寫真が表示されます。
例:
fetchData()
→fetch()
→.then(handleResult)
→handleResult()
がある場(chǎng)合、asyncスタックを有効にして、handleResult
をクリックすると.then()
コールバックだけでなく、完全なチェーンが表示されます。![]()
2.約束と非同期関數(shù)のブレークポイントを設(shè)定します
同期コードのように非同期コードをデバッグすることができます。
-
async
関數(shù)體 -
.then()
および.catch()
コールバック - 內(nèi)部のコードは式
await
ヒント:
- [ソース]タブの行番號(hào)をクリックして、 [コード]ブレークポイントを使用します。
- 実行が
async
関數(shù)內(nèi)のブレークポイントにヒットすると、await
キーワードは、約束が完了すると解決された値が表示されます。 - 変數(shù)の上にホバリングして、現(xiàn)在の狀態(tài)を検査します。これは、そのステータス(
pending
、fulfilled
、rejected
)と価値を示すことを約束します。
3. 「例外の一時(shí)停止」機(jī)能を使用します
非操作の拒否または非同期コールバックのエラーは、すぐに停止するとは限らないため、キャッチするのが難しい場(chǎng)合があります。
スマート例外の一時(shí)停止を有効にする:
- [DevToolsソース]タブで、 [例外の一時(shí)停止]ボタン(?)をクリックします。
- 必要に応じて、 「キャッチされた例外を一時(shí)停止する」を確認(rèn)してください。
- Chromeは、未処理の約束の拒絶(
--unhandled-rejections=strict
FlagまたはModernバージョン)で一時(shí)停止します。
これにより、
.then()
コールバックでエラーをキャッチしたり、黙って失敗する可能性のある表現(xiàn)await
。
4. console.trace()を使用して、迅速なデバッグを使用します
ブレークポイントを使用していない場(chǎng)合は、Asyncコールバックにconsole.trace()
をスプリンクルして、現(xiàn)在のAsyncコールスタックをコンソールにログに記録します。
async関數(shù)step1(){ ステップ2(); } async関數(shù)step2(){ await promise.resolve(); console.trace( "ここからどこから來たの?"); }
これにより、マイクロタスク全體でさえ、非同期パスを示すトレースが出力されます。
5.イベントループでタスクとマイクロタスクを理解します
Chrome devtoolsは、タスク(たとえば、 setTimeout
)とマイクロタスク(例えば、 Promise.then
)を視覚的に區(qū)別しませんが、これを理解することは実行順序を解釈するのに役立ちます。
-
タスク:UIイベント、
setTimeout
、setInterval
-
マイクロタスク:
Promise.then
、queueMicrotask
、MutationObserver
マイクロタスクは次のタスクの前に実行されます。これにより、デバッグタイミングに予期しない遅延や混亂が生じる可能性があります。
ヒント:
performance.now()
またはconsole.time()
を使用して、レース條件をデバッグするときに実際のタイミングを測(cè)定します。
ボーナス:イベントリスナーブレークポイントを使用します
AsyncコードがDOMイベントまたはネットワーク応答によってトリガーされる場(chǎng)合があります。
[ソース]タブで:
- イベントリスナーのブレークポイントを展開します(右側(cè))。
-
click
、fetch
、timeout
などのイベントのブレークポイントを有効にします。
これにより、非同期操作がスケジュールされたときに一時(shí)停止し、ユーザーアクションやAPI呼び出しに戻るのに役立ちます。
Chrome Devtoolsでのアナイクコードのデバッグは、痛みを伴う必要はありません。 ASYNCスタックトレースが有効になっていること、スマートブレークポイント、適切な例外処理により、同期のようにフローをたどることができます。重要なのは、どこを見るべきかを知り、適切な設(shè)定をオンにすることです。
基本的に、非同期スタックを有効にし、例外で一時(shí)停止し、必要に応じてconsole.trace()
を使用します。これは、ほとんどの実際のデバッグシナリオをカバーしています。
以上がChrome Devtoolsでの非同期コードのデバッグの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國(guó)語版
中國(guó)語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

C++ マルチスレッド デバッグでは、次のように GDB を使用できます。 1. デバッグ情報(bào)のコンパイルを有効にします。 2. ブレークポイントを設(shè)定します。 3. infothread を使用してスレッドを切り替えます。 5. next、stepi、および locals を使用してデバッグします。実際のケースのデバッグ デッドロック: 1. threadapplyallbt を使用してスタックを出力します。 2. スレッドのステータスを確認(rèn)します。 3. メイン スレッドにシングル ステップでアクセスし、デッドロックを解決します。

LeakSanitizer を使用して C++ メモリ リークをデバッグするにはどうすればよいですか? LeakSanitizer をインストールします。コンパイル フラグを介して LeakSanitizer を有効にします。アプリケーションを?qū)g行し、LeakSanitizer レポートを分析します。メモリ割り當(dāng)てタイプと割り當(dāng)て場(chǎng)所を特定します。メモリ リークを修正し、動(dòng)的に割り當(dāng)てられたメモリがすべて解放されるようにします。

同時(shí)実行テストとデバッグ Java 同時(shí)プログラミングにおける同時(shí)実行テストとデバッグは非常に重要であり、次の手法が利用可能です。 同時(shí)実行テスト: 単體テスト: 単一の同時(shí)タスクを分離してテストします。統(tǒng)合テスト: 複數(shù)の同時(shí)タスク間の相互作用をテストします。負(fù)荷テスト: 高負(fù)荷時(shí)のアプリケーションのパフォーマンスとスケーラビリティを評(píng)価します。同時(shí)実行デバッグ: ブレークポイント: スレッドの実行を一時(shí)停止し、変數(shù)を検査するかコードを?qū)g行します。ロギング: スレッドのイベントとステータスを記録します。スタック トレース: 例外のソースを特定します。視覚化ツール: スレッドのアクティビティとリソースの使用狀況を監(jiān)視します。

この記事では、実行の一時(shí)停止、変數(shù)の確認(rèn)、ブレークポイントの設(shè)定に使用される組み込みデバッガー dlv など、Go 関數(shù)のデバッグと分析のためのショートカットを紹介します。ログ記録。ログ パッケージを使用してメッセージを記録し、デバッグ中に表示します。パフォーマンス分析ツール pprof は、コール グラフを生成してパフォーマンスを分析し、gotoolpprof を使用してデータを分析します。実際のケース: pprof を通じてメモリ リークを分析し、リークの原因となる関數(shù)を表示するコール グラフを生成します。

PHP 非同期コードをデバッグするためのツールには、次のものがあります。 Psalm: 潛在的なエラーを検出する靜的分析ツール。 ParallelLint: 非同期コードを検査し、推奨事項(xiàng)を提供するツール。 Xdebug: セッションを有効にしてコードをステップ実行することで、PHP アプリケーションをデバッグするための拡張機(jī)能。その他のヒントには、ロギング、アサーションの使用、ローカルでのコードの実行、単體テストの作成などがあります。

再帰関數(shù)のデバッグには、以下のようなテクニックがあります。スタックトレースを確認(rèn)するデバッグポイントを設(shè)定するベースケースが正しく実裝されているか確認(rèn)する再帰呼び出し回?cái)?shù)をカウントする再帰スタックを可視化する

一般的な PHP デバッグ エラーには次のものがあります。 構(gòu)文エラー: コード構(gòu)文をチェックして、エラーがないことを確認(rèn)します。未定義の変數(shù): 変數(shù)を使用する前に、変數(shù)が初期化され、値が割り當(dāng)てられていることを確認(rèn)してください。セミコロンの欠落: すべてのコード ブロックにセミコロンを追加します。関數(shù)が未定義です: 関數(shù)名のスペルが正しいことを確認(rèn)し、正しいファイルまたは PHP 拡張子がロードされていることを確認(rèn)してください。

例外処理を含む C++ デバッグ関數(shù)は、例外ポイント ブレークポイントを使用して例外の場(chǎng)所を特定します。 gdb で catch コマンドを使用して、例外情報(bào)とスタック トレースを出力します。例外ロガーを使用して、メッセージ、スタック トレース、変數(shù)値などの例外をキャプチャおよび分析します。
