web-dev-qa-db-ja.com

デバッガーが間違った行で視覚的に停止するのはなぜですか?

使ってます

[email protected]
[email protected] 
[email protected] (64-bit)
macOS Sierra 10.12.5
[email protected]
[email protected]

最近、デバッガーは間違った行で停止し始めましたが、視覚的にのみ、ほとんどの場合、実際のブレークポイントから8〜14行遅れています。

例えば.

*オレンジ色のバーはグーグルクロームのブレークポイントを示します

コンソール出力:

enter image description here

また、ご覧のとおり、一部の線が暗くなっています。つまり、ブラウザからブレークポイントを設定できません。

動作は、WebStorm内部デバッガー内でも同じです。だから私はそれがChromeのせいではないと思います。ソースマッピングが壊れているようです。原因がWebStormなのかMeteorなのかわかりません。この条件下では、デバッグは非常に困難です...

18
henk

確かに言うのは難しいですが、あなたが経験している問題は、Meteorが誤ったソースマップを生成する原因となるバグに関連しているようです。

ソースマップ

これはブラウザの「障害」ではありません。プロジェクト内のソースマップによってコードとそれに配信される位置を表示するだけです。

app.jsファイルとソースマップ(app.js.map)は、Meteorビルドプロセスによって生成され、.meteor/local/build/programs/web.browser/appディレクトリから提供されます。

.mapファイルは、元のソースを表示する方法と、生成されたapp.jsファイルのどのセグメントが元のソースコードのどのセグメントにマップされるかをブラウザに指示する役割を果たします。

ソースマップの技術的側面についての素晴らしい説明が見つかります ここ

あなたはあなたのソースマップをオンラインで視覚化し、どのマップを使用しているかを見ることができます このツール (選択してください custom....jsファイルと.mapファイルの両方をドラッグアンドドロップします。

疑わしいバグ

ビルドプロセスの一部として、Meteorは babel-compiler Meteorパッケージを使用します。ある時点で、バグが原因で、babel変換後に無効なマップが生成されました。

バグは現在 GitHubで追跡 であり、Meteorの人々は原因に近づいているようです。

あなたは何ができますか?

現時点では、迅速で簡単な修正はありません。

次のいずれかを実行できます。

  • バグスレッドを監視し、解決されるのを待って、今のところソースマップなしでデバッグします(バグがすぐに修正される場合は、おそらく最善です)。
  • 関連するMeteorパッケージのローカルクローンをハックしてください(うまくいく可能性があります。依存関係の問題を掘り下げていないので、あまりお勧めしませんが、 これを行う方法は )。
  • 修正がリリースされるまで、既知の良好な状態でgitチェックアウトからMeteorを実行します。

最後のオプションは、git bisectを介してバグの特定を開始するために @ hwilsonが行った です。

チェックアウトからmeteorツールを実行する方法の詳細については、 Meteor開発者ドキュメント を参照できますが、要点は次のとおりです。

まず、.meteor/versions.meteor/packagesを含むコードがソース管理にチェックアウトされていることを確認します。一時的に混乱させる必要があり、バグが修正されたら復元する必要があるためです。

  1. git clone --recursive https://github.com/meteor/meteor.gitを選択したディレクトリに移動します(例:/home/yourname/src/remote
  2. cd meteor
  3. git checkout 25a89b5最後の既知の適切なコミットを取得します。
  4. git submodule update --init --recursiveは、チェックアウト後もすべてがまだ金色であることを確認します。
  5. ./meteor --helpチェックアウトしたバージョンを開始する
  6. プロジェクトで、バージョン情報を.meteor/packagesファイルから削除します。これは、チェックアウトで提供されるものと互換性がない可能性があるためです。
  7. プロジェクトディレクトリで、/home/yourname/src/remote/meteor/meteor runを実行します。

これにより、チェックアウトされたMeteorバージョンが実行されます。これを機能させるには、meteor reset(警告:ローカルのmongoデータベースをクリアします)を実行するか、少なくとも.meteor/localの一部(ソースマップなど)をクリーンアップする必要がありますが、これは不要な場合があります。

これは、近い将来解決されると思われるバグにとってはかなりの労力ですが、将来のソースマップ関連の問題のドキュメントとして使用するために、この情報を部分的に含めることにしました。

10
MasterAM

確かに言うのは難しいです。大雑把なグーグル検索では、これを見ているのはあなただけではないように見えます。 @MasterAMが述べたように、それはおそらくトランスパイルからのソースマップが原因です。私はあなたがそれについて多くをすることができるとは思わないが、あなたはブラウザとIDEキャッシュをクリアすることを試みることができる、それはいくつかのために働いたように見える。

Javascriptはリモートデバッグモードでブレークポイントのない行で停止します

Webstormのキャッシュをクリアする

1
klvs

このシナリオについてはよくわかりませんが、EclipseでJavaをデバッグしているときに、同様の状況に直面しました。これは、ソースコードとデバッグ中のコンパイル済み/インタープリターコードが異なる場合に発生します。

単純なjsコードをデバッグして、chromeのjsデバッガー自体に問題があるかどうかを検証してみてください。それが機能する場合、「デバッグ対応」ではないコード行の説明は、それらがすべて同じ行にあることです(「7」をログに記録するステートメントまで)。これにより、ブラウザの行番号がオフセットされる可能性もあります。

これは考えられる説明の1つです。

0
Ravindra HV