ما الذي يحصل عليه PDB أثناء تصحيح الأخطاء وكيف أعرف أنه يعمل؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

لا بد لي من استخدام مكون جهة خارجية بدون كود المصدر.لدي الإصدار DLL وملف الإصدار PDB.دعنا نسميها "CorporateComponent.dll".يقوم الكود الخاص بي بإنشاء كائنات من ملف DLL هذا ويستدعي الأساليب على هذه الكائنات.

CorpObject o = new CorpObject();
Int32 result = o.DoSomethingLousy();

أثناء تصحيح الأخطاء، تقوم الطريقة "DoSomethingLousy" بطرح استثناء.ماذا يفعل ملف PDB بالنسبة لي؟إذا كان يفعل شيئًا لطيفًا، فكيف يمكنني التأكد من أنني أستفيد منه؟

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

المحلول

للتأكد مما إذا كنت تستخدم ملف PDB المتوفر، CorporateComponent.pdb، أثناء تصحيح الأخطاء داخل Visual Studio IDE، قم بمراجعة نافذة الإخراج وحدد موقع السطر الذي يشير إلى تحميل CorporateComponent.dll ومتبوعًا بالسلسلة Symbols loaded.

للتوضيح من مشروعي:

The thread 0x6a0 has exited with code 0 (0x0).
The thread 0x1f78 has exited with code 0 (0x0).
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug  \AvayaConfigurationService.exe', Symbols loaded.
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded.

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

يشير هذا إلى أنه تم العثور على PDB وتحميله بواسطة مصحح أخطاء IDE.

كما أشار الآخرون عند فحص إطارات المكدس داخل التطبيق الخاص بك، يجب أن تكون قادرًا على رؤية الرموز من CorporateComponent.pdb.إذا لم تقم بذلك، فربما لم تقم الجهة الخارجية بتضمين معلومات الرمز في إصدار PDB.

نصائح أخرى

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

سأقدم مثالين للاستخدامات.الأول هو الجواب الواضح.والثاني يشرح pdb المفهرسة بالمصدر.

مثال الاستخدام الأول...

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

فكر في السيناريو الذي تواجه فيه انتهاكًا للوصول داخل نظام التشغيل Windows.لا يتم تفكيك تتبع المكدس في التطبيق الخاص بك لأن مكون نظام التشغيل هذا يستخدم اصطلاح استدعاء خاصًا يربك مصحح الأخطاء.إذا قمت بتكوين مسار الرمز الخاص بك لتنزيل نظام التشغيل العام pdb، فهناك احتمال كبير أن يتم تفكيك تتبع المكدس في التطبيق الخاص بك.يمكّنك ذلك من معرفة الوسائط التي مررها الكود الخاص بك بالضبط إلى استدعاء نظام التشغيل.(ومثال مشابه لـ AV داخل مكتبة تابعة لجهة خارجية أو حتى داخل الكود الخاص بك)

مثال الاستخدام الثاني...

تتمتع Pdb بخاصية أخرى مفيدة جدًا - حيث يمكنها التكامل مع بعض أنظمة التحكم بالمصادر باستخدام ميزة تسميها Microsoft "فهرسة المصدر".يحتوي ملف pdb المفهرس بالمصدر على أوامر التحكم بالمصدر التي تحدد كيفية جلب إصدارات الملفات الدقيقة التي تم استخدامها لبناء المكون من التحكم بالمصدر.يفهم مصححو الأخطاء في Microsoft كيفية تنفيذ الأوامر لجلب الملفات تلقائيًا أثناء جلسة تصحيح الأخطاء.هذه ميزة قوية تمنع مهندس التصحيح من الاضطرار إلى مزامنة شجرة المصدر يدويًا مع التسمية الصحيحة لبناء معين.إنه مفيد بشكل خاص لجلسات تصحيح الأخطاء عن بعد ولتحليل عمليات تفريغ الأعطال بعد الوفاة.

يحتوي تثبيت "أدوات تصحيح الأخطاء لنظام التشغيل windows" (windbg) على مستند يسمى srcsrv.doc والذي يوفر مثالاً يوضح كيفية استخدام srctool.exe لتحديد الملفات المصدر المفهرسة بالمصدر في ملف pdb محدد.

للإجابة على سؤالك "كيف أعرف"، يمكن لميزة "الوحدات النمطية" في مصحح الأخطاء أن تخبرك بالوحدات النمطية التي لها ملف pdb مطابق.في Windbg استخدم الأمر "lml".في الاستوديو المرئي، حدد الوحدات النمطية من مكان ما في قوائم التصحيح.(عذرًا، ليس لدي إصدار حالي من Visual Studio سهل الاستخدام)

PDB هو ملف قاعدة بيانات يقوم بتعيين التعليمات لأرقام الأسطر الخاصة بها في الكود الأصلي، لذلك عندما تحصل على تتبع المكدس، ستحصل على أرقام الأسطر الخاصة بالكود.إذا كان ملف DLL غير مُدار، فسيوفر لك ملف PDB أيضًا أسماء الوظائف في تتبع المكدس، في حين أن هذه المعلومات عادةً ما تكون متاحة فقط لمكتبات DLL المُدارة بدون PDBs.

الشيء الرئيسي الذي أحصل عليه من pdb هو أرقام الأسطر وأسماء الطرق الحقيقية لتتبعات المكدس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top