これはコードの多くがスキップされているように見える非常に奇妙な動作です(MacのChromeでのみ発生します)。変数が「未定義」に設定されている可能性があります
ここにChromeの開発ツールのスクリーンショットがあります。 817行目は決してヒットしなかったことに注意してください。しかし、833がヒットし、私たちが見ているのは、ヒットした例外です。私はこの混乱を見つけるために呼び出しスタックを調べました。変数 "loc"、 "lon"、 "tc"はすべて定義されていないことに注意してください。各変数は822行、823/824、827/831行で評価されているため、使用できません。計算にエラーがあった場合、これらの変数の値は私の理解からNaNでなければなりません。
ここでは、実際のコードです:
function getCircle2(latin, lonin, radius) {
var locs = new Array();
var lat1 = latin * Math.PI/180.0;
var lon1 = lonin * Math.PI/180.0;
var d = radius/3956;
var x;
for (x = 0; x <= 360; x++) {
var tc = (x/90) * Math.PI/2;
var lat = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1) * Math.sin(d) * Math.cos(tc));
lat = 180.0 * lat/Math.PI;
var lon;
if (Math.cos(lat1) == 0) {
lon = lonin; // endpoint a pole
}
else {
lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d)/Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI;
}
lon = 180.0 * lon/Math.PI;
var loc = new VELatLong(lat, lon);
locs.push(loc);
}
return locs;
}
は、誰もが、この魔法にいくつかの光を当てることができますか?なぜブレークポイントが無視され、Mac上のChromeで変数の値が正しくないのですか?
編集:
私はバグを修正したようです。私がしたことは、それ自体の関数でブレークコードを分離し、関数を一度呼び出すことでした。例外がスローされた場合は、もう一度呼び出すと100%時間がかかるようです。私はまだ問題の根本原因が何かに興味があります。
//new function to isolate the exception
function getCirclePointOnRadius(deg, lat1, lon1, d, attempt) {
attempt = attempt || 1;
var maxAttempts = 2;
try {
var tc = (deg/90) * Math.PI/2;
var lat = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1) * Math.sin(d) * Math.cos(tc));
lat = 180.0 * lat/Math.PI;
var lon;
if (Math.cos(lat1) == 0) {
lon = lonin; // endpoint a pole
}
else {
lon = ((lon1 - Math.asin(Math.sin(tc) * Math.sin(d)/Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI;
}
lon = 180.0 * lon/Math.PI;
var loc = new VELatLong(lat, lon);
return loc;
}
catch (e) {
console.log2('Error when gathering circle point "' + e + '", trying again', deg, lat1, lon1);
if (attempt < maxAttempts) {
return getCirclePointOnRadius(deg, lat1, lon1, ++attempt);
}
else {
return 0;
}
}
}
そして私は(getCircle2
に)もともとロジックを開催したループを交換する:あなたは、変数の巻上げの犠牲者であるかもしれないよう
for (x = 0; x <= 360; x++) {
locs.push(getCirclePointOnRadius(x, lat1, lon1, d));
}
ローカルファイルまたはjsfiddle/codepenのようなWebサイトでデバッグしていますか? – A1rPun
はい。これは.Netソリューションです。運用ファイルには同じエラーが表示されますが、縮小されたjavascriptファイルが使用されます。 –
WindowsのChromeでうまく機能しますか? –