文字列を整数に変換したものをキーとして使用してオブジェクトにデータを入力するNode.jsアプリケーションを作成しています (「62616324573」など)。オブジェクトは常にキー{key:}を文字列として格納します。これは、javascript配列とその[インデックス]の動作に比べて理想的です。
配列は、undefined
定義されたインデックス間のすべてのインデックスに対して 1 回、100 万回定義されます。
Variables
しかし、パネルがEclipse
表示されるため、新しいオブジェクトを適切にデバッグできないことがわかりましたFailed to read variables
。内部的には正常に動作しているようです。
次のコードを使用します。
var util = require('util');
util.debug('Run this with --debug-brk=port, and press Resume (F8) to break at the breakpoint below.');
var debugMe = {
"1000000000" : {
// "2011743958" : {
"some" : 1234,
"random" : true,
"data" : undefined
},
// "1000000001" : {
// "8302611133" : {
"3302611133" : {
"some" : 12345678,
"random" : false,
"data" : null
}
};
util.debug(JSON.stringify(debugMe)); // Look, it prints fine in all cases. This is internal javascript code.
util.debug('...');
util.inspect(debugMe); // And now it doesn't. This is V8 debugging code.
var breakpoint_here = true; // Set breakpoint here!
// hohoho
にブレークポイントを設定し、breakpoint_here
これをインスタント ブレーク デバッガーで実行しますnode --debug-brk=5858 debugtest.js
。を押しresume
て、1 行目からブレークポイントにジャンプします。パネルに移動してVariables
検査してみてくださいdebugMe
。パネルがクラッシュします。
10..00 と 10..01 で再試行してください。問題ない。ただし、数値は、書き方から判断すると、配列インデックス (!) として解析されるようです。
debugMe ->
[1000000000] -> [Object]
[1000000001] -> [Object]
10..10 と 83..02 を試してください。突然、83..33 がJSON key
配列インデックスではなく通常の値になりましたが、10..00 は依然として配列インデックスです。(?)
debugMe ->
8302611133 -> [Object]
[1000000000] -> [Object]
ここで 10..00 と 33..33 を試すと、Variables
ウィンドウが再びクラッシュします。これは私が期待したものです:
debugMe ->
1000000000 -> [Object]
3302611133 -> [Object]
これは私が推測していることですが、まだ連携しているオブジェクトをデバッグするときは実際には見ることができません:
debugMe ->
[1000000000] -> [Object]
[1000000001] -> undefined
// (...) // debugger memory fills up
[3302611132] -> undefined
[3302611133] -> [Object]
私が推測している問題は、この場合の数値が両方とも配列インデックスであり、違いが大きすぎることです。これは、デバッガーが 2302611133 times を記憶するためundefined
です。array
object
- 一部の数値がキー (文字列) として取得され、他の数値がインデックスとして取得されるのはなぜですか?
- インデックスの組み合わせによってデバッガで機能するものと機能しないものがあるのはなぜですか?
- オブジェクトでも起こっていることを知らずに、「百万回未定義」の問題はありますか?
要約してみましょう:
- 文字列キャスト整数 'int' の小さな違いは正常に動作しているように見えますが、デバッガーでは [インデックス] になります。
- キーの最大約 10 億の大きな違いは機能せず、
Variables
ウィンドウがクラッシュします。コンソール出力なし。 - さらに大きな違いは再び機能しますが、[index] になるものもあれば、'key' のままになるものもあります。
手動でクラッシュ テストを行う必要があったため、問題がオブジェクト自体の内容ではなく、数値にあることが判明するまでに、長い時間がかかりました。同じ (V8) エンジンであるため、問題がアプリケーション自体ではなくデバッガーのみに影響するとは考えにくいです。私が見逃しているすべての事実と変数を誰かが指摘してくれることを願っています。
-アップデート-
これについては誰も知らないようです。既知のロジックも既知のバグもありません。Eclipse WDT にバグを報告しましたが、それが動作の原因かどうかはわかりません。