يمكنني الحصول على سطر من التعليمات البرمجية التي تسببت استثناء؟

StackOverflow https://stackoverflow.com/questions/815395

  •  03-07-2019
  •  | 
  •  

سؤال

وبخلاف قراءة ملف GetFileName() والقراءة على خط GetFileLineNumber() من stackframe من

new StackTrace(exception).GetFrame(x)

وهناك طريقة للحصول على خط الفعلي من التعليمات البرمجية (كسلسلة) التي تسببت استثناء؟

والشكر

هل كانت مفيدة؟

المحلول

والمشاركة moretem التصحيح أمر صعب، لكنه ليس مستحيلا. وهناك الأدوات التي يمكن استخدامها ( هنا و هنا على سبيل المثال)، وكذلك <ل أ href = "http://blogs.msdn.com/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx" يختلط = "نوفولو noreferrer"> تقنيات .

نصائح أخرى

وأنا لا أعتقد ذلك. يتم ترجمة التعليمات البرمجية، وبالتالي فإنه لم يعد متوفرا. ومع ذلك، إذا كنت <م> أيضا لديك رمز مصدر متاح، قد يكون هناك بعض الحلول.

لا، هذا الخيار الوحيد الخاص بقدر ما أعرف. من أجل الحصول على الخط الأصلي من التعليمات البرمجية التي تسبب الاستثناء، فإنه من الضروري أن يكون مصدر متاح. أن StackFrame تمكن بالفعل لك للحصول على خط عدد (عبر رموز التصحيح - ملف PDB في معظم الحالات)، يجعل من واضحة بما فيه الكفاية، وانا اقول

هل هناك أي مشكلة معينة مع طريقة اقترحتم؟

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

وهناك معلومات كافية عن الطبقة StackFrame للحصول على الدرجة المناسبة ISymUnmanagedMethod إذا كان PDB هو متاح. أساسا كل ما تحتاجه هو أسلوب رمزي والتيار تعويض في الأسلوب. هذا لا تتطلب منك لفهم البنية الداخلية للPDB ولست متأكدا ما اذا كان موثقة في أي مكان.

وPDB API: http://msdn.microsoft.com/en- لنا / مكتبة / ms233503.aspx

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

ويمكنك الحصول على خط باستخدام كتلة try catch:

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top