Sentry-javascript: تم تسجيل خاصية رسالة الخطأ باسم [object ErrorEvent]

تم إنشاؤها على ٧ أغسطس ٢٠١٧  ·  31تعليقات  ·  مصدر: getsentry/sentry-javascript

هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟
خلل برمجي.

ما هو السلوك الحالي؟
في بعض الأحيان (وليس دائمًا) يتم تسجيل خاصية الخطأ message على أنها [object ErrorEvent] . لقد اتبعت التنفيذ القياسي لـ Raven in Angular كما هو موضح هنا: https://docs.sentry.io/clients/javascript/integrations/angular/.

ما هو السلوك المتوقع؟
لرؤية رسالة خطأ عادية.

رافين 3.17.0
الزاوي 4.3.1
بناء Webpack
لا تستخدم CLI
إصدار CDN

objecterrorevent

Help Wanted Needs Reproduction Bug

التعليق الأكثر فائدة

لقد وجدت المشكلة. لا يتم التعامل مع ErrorEvent كخطأ بواسطة وظيفة الاستخدام isError ، والتي يمكن العثور عليها هنا . للراحة ، سوف ألصق تعريف الوظيفة أيضًا:

function isError(value) {
  switch ({}.toString.call(value)) {
    case '[object Error]':
      return true;
    case '[object Exception]':
      return true;
    case '[object DOMException]':
      return true;
    default:
      return value instanceof Error;
  }
}

لقد أجريت اختبارًا سريعًا في وحدة التحكم الخاصة بي لمعرفة ما إذا كانت هذه الوظيفة ستعود إلى قيمة ErrorEvent ، ولم تفعل:

image

isError في طريقة captureException لتحديد ما إذا كانت معلمة الاستثناء خطأ أو مجرد رسالة. سيرسل captureException استثناءات إلى لوحة التحكم باستخدام captureMessage إذا كان يعتقد أن الاستثناء ليس _ في الواقع_ خطأ. في هذه الحالة ، لن يحسب Raven تتبع المكدس أو "يعالج" الاستثناء. إنه يرسلها كما هي.

هل هناك أي سبب يمنعنا من تحديث isError للعودة إلى ErrorEvent العناصر

ال 31 كومينتر

هل يوجد تعريف لـ ErrorEvent في مكان ما في مستندات Angular؟ من الواضح أن هذا لا "يرث" Error بالطريقة الصحيحة.

قد تكون المشكلة في طريقة TraceKit traceKitWindowOnError() ، ولا يبدو أنه يأخذ في الاعتبار أن الوسيطة message يمكن أن تكون ErrorEvent (انظر مستندات MDN )

benvinegar هناك بعض المستندات هنا على ErrorEvent : https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent

يتأثر بهذا أيضًا ، هؤلاء المستخدمون:
https://forum.sentry.io/t/reporting-object-errorevent/1807

[email protected] (ولكنه يحدث منذ فترة في الإصدارات الأقدم أيضًا)
الزاوي 4.x
باستخدام CLI

نفس الشيء هنا مع Ionic 3 و [email protected]

<script>
  undefined.foo();
</script>

^ تم تسجيل هذا في html الخاص بك في رحلات السفاري عبر الحارس كـ [object ErrorEvent] . الرسالة الصحيحة ستكون TypeError: undefined is not an object (evaluating 'undefined.foo') .

لدينا برنامج نصي خارجي يقوم بحقن التعليمات البرمجية عبر علامة البرنامج النصي التي تحاول إنشاء إطار iframe ، ولكن تم حظره بواسطة Safari. نظرًا لأن الخطأ ينشأ من علامة البرنامج النصي المحقون ، فإن الحارس يبلغ فقط [object ErrorEvent]

تم الإبلاغ عن خطأ آخر من الحارس على أنه [object Event] من flowplayer. لاعب التدفق يفعل

jQueryElement.trigger('error', [api, {code: 5}]);

يمكنك إعادة إنتاجه من خلال تضمين jQuery والقيام بما يلي:

$('div:first').trigger('error')

يرى الحارس شيئًا كهذا
image

بالتأكيد هذا ليس قابلاً للتسلسل ، ولكن خطأ مثل error on element from jQuery - context <div class="foo><div class="bar" ... سيكون أكثر فائدة من [object Event]

كما تتأثر بهذا.

daangeerdinkjdelaunerosslaverytgensol يمكن لشخص ما أن توفر أصغر كود الممكن أن يمكن أن تساعدني إنتاج هذه؟

لقد راجعت sod للتو ، ويقدم Safari 10.1.2 الرسالة الصحيحة في السيناريو الذي ذكرته أعلاه.

screen shot 2017-09-18 at 14 42 47

أنا شخصياً لا أستطيع تقديم نسخة من الأخطاء ، لأن الأخطاء مبهمة للغاية ولا يمكنني تمييز أي جزء من قاعدة الكود الخاص بي يتسبب في حدوث الخطأ. ليس لدي أي تتبعات مكدس للعمل معها ، ولا رسالة خطأ لمعرفة ما إذا كان هذا هو الكود الخاص بي ، أو مكتبة طرف ثالث ، وما إلى ذلك.

آمل أن يكون لدى شخص آخر مثال مبسط يمكنه تقديمه ، آسف لم أستطع تقديم المزيد من المساعدة.

نحن نواجه هذه المشكلة أيضًا. يمكنني مشاركة بعض البيانات من آخر 10 أيام (22 ألف حدث من هذا النوع ، 13 ألف مستخدم). آمل أن يساعدك على إعادة إنتاجه.
image

image

image

kamilogorek لدينا مليوني خطأ من هذا النوع. اعتقدت أنها كانت مشكلتنا ، لكننا لم نتمكن من تتبعها بشكل صحيح.

لقد وجدت المشكلة. لا يتم التعامل مع ErrorEvent كخطأ بواسطة وظيفة الاستخدام isError ، والتي يمكن العثور عليها هنا . للراحة ، سوف ألصق تعريف الوظيفة أيضًا:

function isError(value) {
  switch ({}.toString.call(value)) {
    case '[object Error]':
      return true;
    case '[object Exception]':
      return true;
    case '[object DOMException]':
      return true;
    default:
      return value instanceof Error;
  }
}

لقد أجريت اختبارًا سريعًا في وحدة التحكم الخاصة بي لمعرفة ما إذا كانت هذه الوظيفة ستعود إلى قيمة ErrorEvent ، ولم تفعل:

image

isError في طريقة captureException لتحديد ما إذا كانت معلمة الاستثناء خطأ أو مجرد رسالة. سيرسل captureException استثناءات إلى لوحة التحكم باستخدام captureMessage إذا كان يعتقد أن الاستثناء ليس _ في الواقع_ خطأ. في هذه الحالة ، لن يحسب Raven تتبع المكدس أو "يعالج" الاستثناء. إنه يرسلها كما هي.

هل هناك أي سبب يمنعنا من تحديث isError للعودة إلى ErrorEvent العناصر

هل هناك أي سبب يمنعنا من تحديثه هو أن الخطأ يعود إلى كائنات ErrorEvent؟

نعم. لأنه في الواقع ليس منحدرًا من Error (إنه منحدر من Event ). ليس لديها خاصية stack ، على سبيل المثال (AFAICT ، اللعب في وحدة التحكم). مما يعني أنه قد لا تتم معالجته بشكل صحيح بالفعل.

سيكون من الرائع رؤية مثال على كيفية إنشاء هذا الخطأ بشكل مباشر ، حتى نتمكن من تحديد أفضل طريقة لمعالجته.

منشئ ErrorEvent يأخذ Error ، لذلك يمكنك التعامل معهم بسهولة مثل:

if (isErrorEvent(ex)) {
    ex = ex.error;
}

يمكنك رؤية تعريف البناء هنا . على وجه الخصوص ، انظر إلى التجزئة ErrorEventInit . إنها معلمة اختيارية ، لذا أعتقد أن الحل الذي نشرته أعلاه لا يتعامل مع الحالة التي يكون فيها ErrorEvent.error غير محدد.

بالتأكيد ، أعتقد أن هذا يمكن حله - لقد قصدت فقط أنه ليس بهذه البساطة مثل زيادة isError لإرجاع true .

أفهم. سأقوم بعرض العلاقات العامة في بضع دقائق.

ثابت في 3.19.x

شكراshcallaway! 👍

يبدو أننا ما زلنا نتلقى هذه المشكلة على 3.19.1 🤔
image
image

PhilippSpo من أي متصفح يأتي هذا الحدث؟ ErrorEvent غير مدعوم في بعض متصفحات الجوال القديمة و IE لذلك كان علينا الرجوع إلى الحل العادي.

kamilogorek كروم 61.0.3163

أراه على Chrome 61 أيضًا. 😕 سأحاول النظر في الأمر قريبًا.

شكرا shcallaway

يحدث أيضًا في Safari 11.0 و Mac OS 10.13

يبدو أن traceKitWindowOnError لا يعالج معلمات الإدخال بشكل صحيح عندما تكون معلمة "message" هي كائن ErrorEvent:
screen shot 2017-11-06 at 11 36 34
و "ex" غير محدد. بعد ذلك ، يستدعي notifyHandlers مع كائن حيث يكون حقل "message" هو ErrorEvent وليس سلسلة:
screen shot 2017-11-06 at 11 41 14
والتي ، عند تحديدها في _makeRequest ، تنتج رسالة لا معنى لها.

شكرًا على التحقيق @ michal-rumanek ، سأحاول معالجة هذه المشكلة قريبًا (ليس لدي وقت فراغ هذا الأسبوع).

kamilogorek ، أي تقدم؟ ؛-)

مرحبًا ، أتلقى الكثير من هذه الأخطاء [object Object] .
screenshot 2017-12-01 09 41 20

الزاوي 4
كروم 62.0.3202
Raven-js 3.20.1

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات