Google Apps Script のデバッガがハングアップしてしまう
Discussion
Closed
解決したいこと
Google Apps Script のデバッガが、日本語の文を代入した変数を扱おうとしたときにハングアップしてしまう問題を解決ないし、回避したい。
発生している問題・エラー
正確な条件はよくわかっていないが、少なくとも次の条件を満たす文字列が代入された変数があるとそれを表示しようとしたときにハングアップしてしまう(少なくとも10秒待っても先に進まなくなってしまう)。
- UTF-8において2バイト以上になる文字で構成される
- 合計201バイト以上の長さ
該当するソースコード
function test() {
const foo = 'あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ';
debugger;
}
上記コードをデバッグで実行した場合、デバッガが次の画像のようになったまま先に進まなくなってしまう。
自分で試したこと
-
あ
を「66文字」と「67文字」で試すと、後者はハングしてしまう。 -
©
も同様に「100文字」と「101文字」で試すと、後者がハングしてしまう。 -
𐌱
も同様。「50文字」と「50文字+a
」の場合は、後者でハング。 -
a
を202文字にした場合ではハングしない。 - 2つの異なるアカウントで試したが同様の結果になった。
-
'use strict'
であるかどうかは関係がなさそう。 - Rhino ランタイムで試そうとしたが、そもそもデバッガが対応していなかったため失敗に終わった。
以下、その他の試行。
あ
が67文字連続した文字列の場合はハングしてしまう。
function test1_1() {
const foo = 'あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ';
debugger;
}
先頭にa
をつけただけでハングしなくなる場合がある。
function test1_2() {
const foo = 'aあああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ';
debugger;
}
アルファベットの混合だけでは回避できない。
function test2() {
let foo = 'このスクリプトは、 Google Apps Script のデバッガがハングアップしてしまう問題の確認用に作成しました。条件は不明ながら、一定の条件を満たす文字列が代入された変数を扱おうとするとデバッガはフリーズしてしまうようです。';
debugger;
}
再代入で条件を満たさない文字列になった場合はハングしない。例えば次のコードの場合、①の位置で止めるとハングするが、②の位置ではハングしない。
function test3() {
let foo = 'あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ';
//①
foo = 'a';
//②
}
オブジェクトに値として代入した場合もダメなよう。
function test4() {
const foo = {
1: 'あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ'
};
debugger;
}
Map
オブジェクトの場合はうまくいった。
function test5() {
const foo = new Map([
[1, 'あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ'],
]);
debugger;
}