5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ブラウザ上でevalしたJavaScriptのデバッグ(Chrome限定)

Posted at

前提

ブラウザ上のAltJS(CoffeeScript等でJavaScriptにコンパイル)やJavaScriptをevalで実行するような環境においては、eval対象のJavaScriptをDeveloperToolsにてデバッグ(主にステップ実行など)することができないと思っていました。

でも、たまにeval対象のJavaScriptでエラーが発生した時などに、DeveloperToolsにevalしたJavaScriptのソースが表示され、エラーが発生した行にフォーカスがあたっていることがあり、エラーを起こさないとデバッグできないのかと諦めていました。

解決方法

evalするスクリプト内で、console.logでログ出力することにより、Chrome内でevalされたスクリプトにアクセスできるようになります。

// サンプルコード(Chrome上のDeveloperToolsのコンソールで実行できます)
// (1)関数を返却するスクリプト
var script = '(function(){\n' +
         'console.log("vmstart");\n' + 
         'return function() { \n' + 
         '  for(i = 0;i < 10;i++){\n' +
         '    console.log(i);\n' +
         '  }\n' +
         '}})()';

var f = eval(script); // (2)evalし、関数を取得

f();  // (3)関数を実行

(1)evalするJavaScriptの先頭に、どんな文字列でも良いので、console.logで文字列を出力します。
上記のコードで(2)を実行すると、DeveloperTools上には、このような表示になります。

eval-result.png

コンソールに出力されたvmstart の右側に表示されているVM7139:2をクリックすると、evalしたスクリプトのソースが表示され、ブレークポイントも設定できるようになります。

eval-script.png

(3)を実行した時に、ブレークポイントで止まっている様子

eval-debug.png

注意

evalするごとに、最初に表示されるログ(vmstart)の右側の値(VM????)の値が変更されるので、ブレークポイントはリセットされてしまうようです。

5
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?