質問編集履歴
4
質問本文の一部が debug-code\.js のものに書き換わっていなかったのを修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
</script>
|
43
43
|
```
|
44
44
|
|
45
|
-
今度は期待通りに動作しますが、~~コードの実行コードの行数がコンソールで確認できなくなってしまいました(tako-black さんに `error.stack` を教えていただいた事で例外発生時には該当行を終えました
|
45
|
+
今度は期待通りに動作しますが、~~コードの実行コードの行数がコンソールで確認できなくなってしまいました(tako-black さんに `error.stack` を教えていただいた事で例外発生時には該当行を終えました。例外が発生していない時には V8 Stack Trace API で Google Chrome のみ行数を追えましたが、他のブラウザでは行数を追えません)。
|
46
46
|
何か上手い手立てはないものでしょうか。
|
47
47
|
|
48
48
|
**(2015/12/10 01:40追記)**
|
@@ -54,8 +54,8 @@
|
|
54
54
|
|
55
55
|
###発生している問題・エラーメッセージ
|
56
56
|
|
57
|
-
例外エラー発生時にプログラムを強制終了しない為に `try-catch` を利用している為、コンソールに出力されるコード実行行が `return Function.apply(null, args).apply(
|
57
|
+
例外エラー発生時にプログラムを強制終了しない為に `try-catch` を利用している為、コンソールに出力されるコード実行行が `return Function.apply(null, args).apply(this, getObjectValues(valiables));` の行になってしまいます。
|
58
|
-
`
|
58
|
+
`debug.test()` を呼び出した行数をコンソールに出力したい。
|
59
59
|
|
60
60
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
61
61
|
|
3
「JavaScript Stack Trace API」を使用して例外未発生時にもエラースタックで追従できるようにしました\(Google Chromeのみ\)
title
CHANGED
File without changes
|
body
CHANGED
@@ -28,7 +28,8 @@
|
|
28
28
|
debug = new DebugCode({wm: wm, object: object}); // コード実行時に参照するローカル変数を指定する(プロパティ名: ローカル変数名 / プロパティ値: ローカル変数の値)
|
29
29
|
|
30
30
|
debug.test('\'hoge\''); // "hoge" (※debug.console.allLog() は評価値を返す時、それが String 型なら "" で括る)
|
31
|
+
debug.console.options.useStack = true; // エラースタックを返す動作をデフォルトとする(DebugCode#test, DebugCode#console のデフォルト動作に影響)
|
31
|
-
debug.test('wm.set(object, 2)'); // WeakMap {Object {} => 2}
|
32
|
+
debug.test('wm.set(object, 2)'); // WeakMap {Object {} => 2} (Google Chrome は例外なしでもエラースタック動作)
|
32
33
|
debug.test('wm.get(object)'); // 2
|
33
34
|
debug.test('wm.get(null)'); // undefined
|
34
35
|
debug.test('wm.get.call(null)'); // TypeError: Method WeakMap.prototype.get called on incompatible receiver null
|
@@ -36,14 +37,21 @@
|
|
36
37
|
debug.test('wm.set(null, {})'); // TypeError: Invalid value used as weak map key
|
37
38
|
debug.test('wm.set.call(null, {}, 1)'); // TypeError: Method WeakMap.prototype.set called on incompatible receiver null
|
38
39
|
debug.test('wm.set.call({}, {}, 1)'); // TypeError: Method WeakMap.prototype.set called on incompatible receiver #<Object>
|
39
|
-
debug.console.
|
40
|
+
debug.console.logAll(); // 全コードを評価値orエラースタックのコメント付で出力(引数未指定はデフォルトなのでエラースタック指定)
|
40
|
-
debug.console.
|
41
|
+
debug.console.logAll(false); // 全コードを評価値orエラーのコメント付で出力(デフォルト動作を上書きしてエラースタック無しを指定)
|
41
42
|
</script>
|
42
43
|
```
|
43
44
|
|
44
45
|
今度は期待通りに動作しますが、~~コードの実行コードの行数がコンソールで確認できなくなってしまいました(tako-black さんに `error.stack` を教えていただいた事で例外発生時には該当行を終えましたが、例外が発生していない時には行数を追えません)。
|
45
46
|
何か上手い手立てはないものでしょうか。
|
46
47
|
|
48
|
+
**(2015/12/10 01:40追記)**
|
49
|
+
|
50
|
+
Google Chrome のみ、「JavaScript Stack Trace API」を使用して例外未発生時にもエラースタックで追従できるようになりました。
|
51
|
+
|
52
|
+
- [Stack Trace API · v8/v8 Wiki](https://github.com/v8/v8/wiki/Stack%20Trace%20API)
|
53
|
+
- [JavaScriptStackTraceApi邦訳。Errorオブジェクトのstackについて。 | Ginpen.com](http://ginpen.com/2014/05/13/javascriptstacktraceapi/)
|
54
|
+
|
47
55
|
###発生している問題・エラーメッセージ
|
48
56
|
|
49
57
|
例外エラー発生時にプログラムを強制終了しない為に `try-catch` を利用している為、コンソールに出力されるコード実行行が `return Function.apply(null, args).apply(null, getObjectValues(valiables));` の行になってしまいます。
|
@@ -74,4 +82,9 @@
|
|
74
82
|
- tako-black さんに教えて頂いた `error.stack` をコードに反映しました。
|
75
83
|
- 静的関数を止めてコンストラクタ呼び出しする事でローカル変数の指定をキャッシュするようにしました。
|
76
84
|
- 実行コード、評価値、エラーをキャッシュし、最後にまとめて出力できるようにしました。
|
77
|
-
- `debug-code.js` を github に置きました。
|
85
|
+
- `debug-code.js` を github に置きました。
|
86
|
+
|
87
|
+
**(2015/12/10 01:40追記)**
|
88
|
+
|
89
|
+
- 「JavaScript Stack Trace API」を使用して例外未発生時にもエラースタックで追従できるようにしました(Google Chromeのみ)。
|
90
|
+
- JSDoc コメントを入れました。
|
2
debug-code\.js の記述修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,6 +16,8 @@
|
|
16
16
|
例外エラーが発生するとプログラムが強制終了されますが、今回はコードの実行テストが目的なので強制終了してほしくありません。
|
17
17
|
そこで下記コードを組みました。
|
18
18
|
|
19
|
+
- [debug-code.js: コードを実行し、評価値or例外エラーをプログラムを強制終了せずに返す](https://gist.github.com/think49/bfca562039aa29fa5766)
|
20
|
+
|
19
21
|
```HTML
|
20
22
|
<!-- https://gist.github.com/think49/bfca562039aa29fa5766 のjsファイルを参照する -->
|
21
23
|
<script src="debug-code.js"></script>
|
@@ -61,7 +63,7 @@
|
|
61
63
|
- [23.3.3.3 WeakMap.prototype.get(key) – ECMA-262 6th Edition](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap.prototype.get)
|
62
64
|
- [23.3.3.5 WeakMap.prototype.set(key, value) – ECMA-262 6th Edition](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap.prototype.set)
|
63
65
|
|
64
|
-
`
|
66
|
+
`debug-code.js` を github に置きました。
|
65
67
|
|
66
68
|
- [debug-code.js: コードを実行し、評価値or例外エラーをプログラムを強制終了せずに返す](https://gist.github.com/think49/bfca562039aa29fa5766)
|
67
69
|
|
@@ -72,4 +74,4 @@
|
|
72
74
|
- tako-black さんに教えて頂いた `error.stack` をコードに反映しました。
|
73
75
|
- 静的関数を止めてコンストラクタ呼び出しする事でローカル変数の指定をキャッシュするようにしました。
|
74
76
|
- 実行コード、評価値、エラーをキャッシュし、最後にまとめて出力できるようにしました。
|
75
|
-
- `
|
77
|
+
- `debug-code.js` を github に置きました。
|
1
error\.stack をコードに反映しました。DebugCode を github に置きました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,40 +16,30 @@
|
|
16
16
|
例外エラーが発生するとプログラムが強制終了されますが、今回はコードの実行テストが目的なので強制終了してほしくありません。
|
17
17
|
そこで下記コードを組みました。
|
18
18
|
|
19
|
-
```
|
19
|
+
```HTML
|
20
|
-
var testCode = (function (getObjectValues) {
|
21
|
-
var i = 0;
|
22
|
-
|
23
|
-
function testCode (code, valiables) {
|
24
|
-
var args = Object.keys(valiables);
|
25
|
-
|
26
|
-
|
20
|
+
<!-- https://gist.github.com/think49/bfca562039aa29fa5766 のjsファイルを参照する -->
|
27
|
-
|
21
|
+
<script src="debug-code.js"></script>
|
28
|
-
}
|
29
|
-
|
30
|
-
|
22
|
+
<script>
|
31
|
-
}((function (keys, mapfn) {
|
32
|
-
return function getObjectValues (object) {
|
33
|
-
return keys(object).map(mapfn, object);
|
34
|
-
};
|
35
|
-
}(Object.keys, function mapfn (key) {
|
36
|
-
|
23
|
+
'use strict';
|
37
|
-
}))));
|
38
|
-
|
39
24
|
var wm = new WeakMap,
|
40
|
-
object = {}
|
25
|
+
object = {},
|
26
|
+
debug = new DebugCode({wm: wm, object: object}); // コード実行時に参照するローカル変数を指定する(プロパティ名: ローカル変数名 / プロパティ値: ローカル変数の値)
|
41
27
|
|
28
|
+
debug.test('\'hoge\''); // "hoge" (※debug.console.allLog() は評価値を返す時、それが String 型なら "" で括る)
|
42
|
-
|
29
|
+
debug.test('wm.set(object, 2)'); // WeakMap {Object {} => 2}
|
43
|
-
|
30
|
+
debug.test('wm.get(object)'); // 2
|
44
|
-
|
31
|
+
debug.test('wm.get(null)'); // undefined
|
45
|
-
|
32
|
+
debug.test('wm.get.call(null)'); // TypeError: Method WeakMap.prototype.get called on incompatible receiver null
|
46
|
-
|
33
|
+
debug.test('wm.get.call({})'); // TypeError: Method WeakMap.prototype.get called on incompatible receiver #<Object>
|
47
|
-
|
34
|
+
debug.test('wm.set(null, {})'); // TypeError: Invalid value used as weak map key
|
48
|
-
|
35
|
+
debug.test('wm.set.call(null, {}, 1)'); // TypeError: Method WeakMap.prototype.set called on incompatible receiver null
|
49
|
-
|
36
|
+
debug.test('wm.set.call({}, {}, 1)'); // TypeError: Method WeakMap.prototype.set called on incompatible receiver #<Object>
|
37
|
+
debug.console.allLog(); // 全コードを評価値orエラーのコメント付で出力
|
38
|
+
debug.console.allLog(true); // 全コードを評価値orエラースタックのコメント付で出力
|
39
|
+
</script>
|
50
40
|
```
|
51
41
|
|
52
|
-
今度は期待通りに動作しますが、コードの実行コードの行数がコンソールで確認できなくなってしまいました。
|
42
|
+
今度は期待通りに動作しますが、~~コードの実行コードの行数がコンソールで確認できなくなってしまいました(tako-black さんに `error.stack` を教えていただいた事で例外発生時には該当行を終えましたが、例外が発生していない時には行数を追えません)。
|
53
43
|
何か上手い手立てはないものでしょうか。
|
54
44
|
|
55
45
|
###発生している問題・エラーメッセージ
|
@@ -69,4 +59,17 @@
|
|
69
59
|
例外の発生条件は ES6 仕様書を参考にしました。
|
70
60
|
|
71
61
|
- [23.3.3.3 WeakMap.prototype.get(key) – ECMA-262 6th Edition](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap.prototype.get)
|
72
|
-
- [23.3.3.5 WeakMap.prototype.set(key, value) – ECMA-262 6th Edition](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap.prototype.set)
|
62
|
+
- [23.3.3.5 WeakMap.prototype.set(key, value) – ECMA-262 6th Edition](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap.prototype.set)
|
63
|
+
|
64
|
+
`DebugCode` のサンプルコードを github に置きました。
|
65
|
+
|
66
|
+
- [debug-code.js: コードを実行し、評価値or例外エラーをプログラムを強制終了せずに返す](https://gist.github.com/think49/bfca562039aa29fa5766)
|
67
|
+
|
68
|
+
---
|
69
|
+
|
70
|
+
**(2015/12/09 22:35追記)**
|
71
|
+
|
72
|
+
- tako-black さんに教えて頂いた `error.stack` をコードに反映しました。
|
73
|
+
- 静的関数を止めてコンストラクタ呼び出しする事でローカル変数の指定をキャッシュするようにしました。
|
74
|
+
- 実行コード、評価値、エラーをキャッシュし、最後にまとめて出力できるようにしました。
|
75
|
+
- `DebugCode` のサンプルコードを github に置きました。
|