Google ChromeのインラインJavaScriptにブレークポイントを設定するにはどうすればよいですか?


210

Google Chromeで開発者ツールを開くと、プロファイル、タイムライン、監査などのあらゆる種類の機能が表示されますが、jsファイルとhtmlおよびjavascriptコードの両方にブレークポイントを設定できるなどの基本的な機能がありません。それ自体がバグのあるJavaScriptコンソールを使用しようとしました。たとえば、JSエラーが発生すると、ページ全体を更新しない限り、コンソールから抜け出すことができません。誰か助けてもらえますか?


Chromeをあきらめました。Firefoxを試してみて、数秒以内にブレークポイントがヒットしました。Chromeでも可能かもしれませんが、その方法は明らかではありません。
Oliver P

回答:


126

[ソース]タブを使用すると、JavaScriptでブレークポイントを設定できます。その下のディレクトリツリー(上向き矢印と下向き矢印を含む)で、デバッグするファイルを選択できます。同じタブの右側にある再開を押すと、エラーから抜け出すことができます。


31
何らかの理由で含まれているjsファイルのリストが表示されますが、実行中のページ自体を選択できません。リストに表示されません。何か案は?
ulu

67
@ulu、私は同じ問題を抱えていました。type = "text / javascript"属性が<script>要素に設定されていることを確認してください。
contactmatt 2011

9
ただし、HTML5ではこの属性は必須ではありません。デバッグのためだけにソースコードを変更するわけではありません。
sashok_bg 2016年

10
type = "text / javascript"を追加した後も表示されない
Nitin Kumar Mishra

2
これが機能せず、次のようなインラインJavaScriptコードがある場合:次の<script> your code </script>ような名前を追加します。<script> your code //# sourceURL=somename.js </script> これは、以下の回答で
詳しく

209

<script>このようなタグ内のコード、またはHTMLタグ属性について話しているのですか?

<a href="#" onclick="alert('this is inline JS');return false;">Click</a>

どちらにしても、キーワードこのように動作します:debugger

<a href="#" onclick="debugger; alert('this is inline JS');return false;">Click</a>

注意:debugger開発ツールが開いていない場合、Chromeはsで一時停止しません。


JSファイルと<script>タグにプロパティブレークポイントを設定することもできます。

  1. ソース」タブをクリックします
  2. ナビゲーター表示アイコンをクリックし、ファイルを選択します
  3. 左マージンの行番号をダブルクリックします。対応する行が[ ブレークポイント ]パネル(4)に追加されます。

ここに画像の説明を入力してください


4
[スクリプト]タブはありません。この図にある他のすべてのタブは表示されますが、[スクリプト]タブは表示されません。
エース

5
つまり、htmlのscripタグ内にブレークポイントを設定できるということです。私もデバッガを使ってみました。キーワードが機能しません。Chromeはその点でブレークポイントを設定していませんが、Firefoxで動作します。コードの多くの場所に配置して削除する必要があるデバッガーキーワードに基づいていないブレークポイントソリューションを探しています。
エース

2
[スクリプト]タブのドロップダウンには、JSファイルのみが表示され、デバッグする<script>タグを含むHTMLファイルは表示されません。FFのFirebugにも同様のドロップダウンがありますが、<script>タグを含むHTMLファイルもリストされます。これはバグですか、インラインJSコードにブレークポイントを設定する別の方法はありますか?
Wolfram Arnold

8
現在ではSourcesなくタブが呼び出されますScripts
CoderDennis 2012

1
HTML埋め込みjsをデバッグしようとすると、開発領域に空白のページが表示されました。空のソースファイルを見ながら更新して、データを入力する必要がありました。
HappyCoder86 2014年

72

スクリプトに名前を付けることもできます。

<script> ... (your code here) //# sourceURL=somename.js </script>

もちろん、 "somename"を何らかの名前で置き換えます;)すると、それが通常のスクリプトとして "Sources> top>(no domain)> somename.js"のchromeデバッガーに表示され、他のスクリプトと同じようにデバッグできます


3
最も簡単で完璧な方法です。ただし、他の人のために、本番環境にプッシュする前に必ず削除してください。
Zameer Fouzan 2018

2
これがどれほど私を助けてくれたのか、あなたにはわかりません。なんてこった、これは素晴らしい。私は長い間、このようなものを探してきました。
GregRos

私はこの(細かい)アイデアを使用しましたが、[ソース]タブに新しいファイルが表示されず、htmlファイルのみが表示されました。次に、コードを実行しました。最後に、コンソールで、スクリプトから書き込まれたメッセージの右側に、コードへのリンクが表示されています。最良の部分は、リンクにスクリプトに付けたファイル名が表示されることです(例://#sourceURL = somename.js)。
Manuel Rivera、

1
できれば1000票をあげます;)非常に便利なトリック
Giulio Quaresima

43

スクリプトが含まれているページを更新するには、スクリプトタブで開発者ツールを開きます。これにより、スクリプトを含むページのhtmlを表示する(プログラム)エントリがファイルリストに追加されます。ここから、ブレークポイントを追加できます。


これは私にはうまくいきませんでした。代わりに、右下のスクリプトエラーアイコンをクリックして、[スクリプト]タブでプログラムファイルを開きました。
sanbikinoraion 2013

1
ありがとう!Chrome 69を使用すると、[ソース]タブにいなくてもこれは機能しました。ページが読み込まれている間に開発者ツールを開くことが鍵となるようです。
サム

これが私の質問であれば、これは受け入れられた答えだったでしょう。ありがとうございました。
plumpNation

Chrome 83で動作しました。私の環境では、ファイル名はアプリのURLに基​​づいています。たとえば、URLがexample.com/xxx/yyyの場合、ファイル名は「yyy」になります。
Helix Quar

18

特にajaxによって返されたhtml内のスクリプトをデバッグするもう1つの直感的な単純なトリックは、スクリプト内にconsole.log( "test")を一時的に置くことです。

イベントを発生させたら、開発者ツール内のコンソールタブを開きます。「test」デバッグ印刷ステートメントの右側にソースファイルリンクが表示されます。ソース(VM4xxxなど)をクリックするだけで、ブレークポイントを設定できます。

PS:@Matt Ballで提案されているように、クロムを使用している場合は、 "debugger"ステートメントを配置することを検討してください。


10

私の状況とそれを修正するために
私がしたこと:次のように、JavaScriptページがHTMLページに含まれています。
ページ名:test.html

<!DOCTYPE html>
<html>
    <head>
        <script src="scripts/common.js"></script>
        <title>Test debugging JS in Chrome</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div>
         <script type="text/javascript">
            document.write("something");
         </script>

        </div>
     </body>
</html>

次に、ChromeでJavascriptデバッガーに入り、[スクリプト]タブをクリックして、上記のようにリストをドロップダウンします。私ははっきりと見ることができますcommon.js /スクリプトをしかし、私はできませ現在のHTMLページを参照test.htmlというので、私は埋め込まれたJavaScriptをデバッグすることができませんでした、ドロップダウンでは:

<script type="text/javascript">
  document.write("something");
</script>

それは困惑した。ただし、埋め込みスクリプトから廃止されたtype = "text / javascript"を削除すると、次のようになります。

<script>
  document.write("something");
</script>

..そして、ページをリフレッシュ/リロードしました、出来上がり、それはドロップダウンリストに表示され、すべてが再びうまくいきました。
これがHTMLページに埋め込まれたJavaScriptのデバッグで問題が発生しているすべての人に役立つことを願っています。


よくやった!Mac 10.7.4のChrome 20.0.1132.57でテスト済みChromiumプロジェクトにバグを送信しました。
Mars Robertson、

HTML 4およびXHTMLでは、typeは必須属性です。HTML5では、これはオプションです。
hotshot309

2
タイプとは何の関係もありません。この時点でインスペクターが既に開かれていない限り、スクリプトは実行後にVMによって収集されます。ページをリロードしても、スクリプトは収集されませんでした。
vsevik 2012

私は私のケースです。欠落<div>していると、デバッガーでコードが表示されません
ceztko

5

debugger;私のスクリプトの上に追加するのがうまくいきました。


4

私も同じ問題を抱えていました<script>。タグの中にあるJavaScriptをデバッグする方法です。しかし、[(index)]と呼ばれる[Sources]タブの下に、括弧が付いているのがわかりました。行番号をクリックして、ブレークポイントを設定します。

ここに画像の説明を入力してください

これはChrome 71です。


2

[スクリプト]タブが表示されない場合は、正しい引数でChromeを起動していることを確認してください。引数を指定してサーバーサイドJavaScriptをデバッグするためにChromeを起動したときに、この問題が発生しました--remote-shell-port=9222。引数なしでChromeを起動しても問題ありません。


詳しく説明してもらえますか?私はこの正確な問題を抱えています-スクリプトタブがまったく表示されません。Chromeの最新の開発者ビルドをダウンロードしました。
トムレッドファーン2012年

2

私はこの問題に遭遇しましたが、私のインライン関数はangularJSビューを使用していました。したがって、ロード時に、デバッガーの[ソース]タブで使用できるのはindex.htmlだけだったため、インラインスクリプトにアクセスしてデバッグを追加できませんでした。

これは、インラインで(これに選択の余地がなかった)特定のビューを開いたときに、アクセスできなかったことを意味します。

私がそれを打つことができた唯一の方法は、誤った関数を置くか、インラインJS関数内に呼び出すことでした。

私のソリューションが含まれています:

function doMyInline(data) {
        //Throw my undefined error here. 
        $("select.Sel").debug();

        //This is the real onclick i was passing to 
        angular.element(document.getElementById(data.id)).scope().doblablabla(data.id);
    }

つまり、ボタンをクリックすると、Chromeコンソールでプロンプトが表示されました。

Uncaught TypeError: undefined is not a function 

ここで重要なのはこれのソースでした。これをVM5658:6クリックすると、インラインでステップスルーして、後でブレークポイントを保持できます。

それを達成するための非常に複雑な方法..しかし、それは機能し、ビューを動的にロードするシングルページアプリを扱うときに役立つかもしれません。

VM[n]は重要な値はなく、nonはスクリプトIDに相当します。この情報はここにあります:Chrome "[VM]"


1

Visual Studio(2012)を使用して同じ問題が発生し、IIS Expressに切り替えると問題が解決しました。

scriptタグのtype属性は、それへの要因ではありませんでした。

何らかの理由で、Visual Studio開発サーバーは、Chromeがブレークポイントを有効にするために必要なすべてを提供しません。


1

Qが問題ではないことはわかってFirefoxいますが、この質問のコピーを追加して自分で回答するだけではありません。

Firefoxではdebugger;@ matt-ballscriptタグに対して提案したことを実行できるように追加する必要があります 。

したがって、コードで、debuggerデバッグする行の上に追加してから、ブレークポイントを追加できます。ブラウザーでブレークポイントを設定しただけでは停止しません。

質問がChromeに関するものであるため、Firefoxの回答を追加する場所でない場合。しないでください:(マイナスの答えは、どこに投稿すればよいか教えてください。喜んで投稿を移動します。)


0

これは、上記のRian Schmitsの回答を拡張したものです。私の場合、JavaScriptコードにHTMLコードが埋め込まれていて、HTMLコード以外は何も表示されませんでした。おそらくChromeデバッグは長年にわたって変化しましたが、[ソース/ソース]タブを右クリックすると、[ ワークスペースにフォルダーを追加 ]が表示されました。プロジェクト全体を追加できたため、すべてのJavaScriptにアクセスできました。詳細については、このリンクを参照してください。これが誰かの役に立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.