سؤال

عند استخدام WindBG ، أين يجب وضع ملفات الرموز الخاصة (PDB؟)؟

وضعي هو: لدي DLL الذي أريد تصحيحه. لدي رمز المصدر وملفات الرموز لهذا DLL. يطلق على DLL هذا DLL آخر (ليس لدي رموز أو مصدر) والذي ، بدوره ، يطلق عليه EXE (الذي ليس لدي أيضًا رموز أو مصدر).

مشكلتي هي أنني أحصل على تحذير يقول

*** تحذير: غير قادر على التحقق C: theProgram Somesubfolder Anothersubfolder mydll.dll

أعتقد أن هذا التحذير هو السبب في أنني أتلقى النوع التالي من الرسائل في مكدس الاتصال:

mydll! aclass :: Afunction+Offhexaddress

بنية الملف الخاصة بي تبدو مثل هذا:

The Exe: C: TheProgram program.exe

The Calling DLL: C theProgram Somesubfolder Caller. ؟؟؟

DLL الذي أريد تصحيحه: C: theProgram Somesubfolder Anothersubfolder mydll.dll

ملاحظة: قمت بتعيين مسار الملف الرمز ومسار الملف المصدر إلى المكان الذي تم فيه إنشاء DLL DLL ، في مساحة العمل الخاصة بي على محرك أقراص مختلف من EXE .. لكنني قمت بنسخ ملفات خريطة PDB + ووضعها على DLL التي أردت لتصحيح ..

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

المحلول

آسف على الرد المتأخر.
في رسالتك ، ذكرت أنك ترى رسالة الخطأ التالية.

*** WARNING: Unable to verify checksum for C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

أنت أيضًا تسأل السؤال ، "أين أضع رمواتي لـ DLL في مسار الرمز؟"

فيما يلي استجابة للمشكلة الأولى:

خطوات لتحديد الرموز غير المتطابقة.

  1. ! سيم صاخبة
  2. .إعادة تحميل
  3. x mydll!*class*
    *يعيد تحميل DLL الخاص بك ، بدلاً من ذلك ، يمكنك كتابة KB لعرض مكدس المكالمات الخاص بـ DLL الذي يجب تحميله أيضًا.
  4. ! سيم هادئ
    *إعادة تعيين العودة إلى تحميل الرمز الهادئ الأصلي

كما يمكنك الجري

0:001> lmv m myDll  *(and examine the Checksum)

ملاحظة: إذا كان لديك اختبارات ، فيمكن أن يتطابق Windbg مع اختبارات DLL مقابل فحص PDB. كل بيئة تنمية لديها طريقة مختلفة لتوليد فحص.

إليكم الرد على الأسئلة حول مكان وضع PDBs

إذا تمت إضافة mydll.pdb إلى متجر رمزي ، فيمكنك استخدام بناء الجملة التالي

.sympath SRV*c:\symcache*http://msdl.microsoft.com/download/symbols 

كما اقترح روجر أعلاه ...

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

.sympath C:\TheProgram\SomeSubfolder\AnotherSubfolder\;SRV*c:\symcache*http://msdl.microsoft.com/download/symbols

وبهذه الطريقة ، يجب أن تبدو Windbg محلية لـ Somsubfolder Dir قبل محاولة استخدام ذاكرة التخزين المؤقت لخادم الرموز.

شكرا ، هارون

نصائح أخرى

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

التحذير الذي تراه لا لديك أي تأثير على تتبع المكدس ، ولكن حقيقة أنك تفتقد الرموز لـ Caller.dll و App.exe يفعل.

تكوين الرموز في WindBG (محليًا) بسيط مثل استخدام:

.sympath [+] path_to_pdbs

.symfix+ path_to_system_pdb_store

ترى:

mydll! aclass :: Afunction+OffhexAddress
في الواقع لا يعني شيئًا طالما أن بعض الشيء معقول (وشريطة أن يكون mydll.pdb قد تم العثور عليه وتحميله!) - يبدو أنه إدخال مكدس المكالمات المناسب.

الآن ، سيكون سؤالي ، ما هي المشكلة التي تمسك بها؟

ملاحظة: لا تحتاج إلى ملف .map مع Windbg.

كجزء من عملية الإنشاء الخاصة بنا ، نقوم بنسخ ملفات PDB الخاصة وملفات EXE/DLL التي تم إصدارها إلى خادم رمز. في أبسطه ، هذا مجرد مسار UNC ، ولكن يمكنك تكوينه للوصول باستخدام HTTP.

لنسخ ملفات الإخراج الخاصة بك ، استخدم برنامج SymStore.exe.

بعد ذلك ، قم بتكوين تصحيح الأخطاء (نستخدم Visual Studio و Windbg) للنظر في هذا المسار. بالنسبة إلى Windbg ، فإن أبسط طريقة للقيام بذلك هي تعيين متغير البيئة:

_NT_SYMBOL_PATH=
    SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols;
    \\symsvr\Symbols

(يجب أن يكون كل ذلك على سطر واحد)

هذا يقوم بتكوين Windbg للنظر في خادم Microsoft Symbor (تخزين الملفات في C: WebSyMbols) وأيضًا للنظر في متجر رمز محلي (\\symsvr\Symbols).

نستخدم أيضًا أدوات Source Server لتخزين تفاصيل SVN في ملف PDB ، مما يعني أنه يمكننا العودة إلى الملف المصدر الدقيق المستخدم لإنشاء إصدار معين. إنظر في ...\Debugging Tools for Windows (x86)\srcsrv.

أحد الخيارات هو ترك ملفات الرمز حيث تكون (أي في مجلد إخراج البناء) ثم استخدم -y خيار سطر أوامر Windbg لتحديد هذه الملفات. يجب أن يضمن استخدام هذا النهج دائمًا أن تكون ملفات الرموز محدثة.

من مساعدة Microsoft:

-y SymbolPath 
Specifies the symbol search path. Separate multiple paths with a 
semicolon (;). If the path contains spaces, it should be enclosed 
in quotation marks. For details, and for other ways to change this 
path, see Symbol Path. 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top