سؤال

يزعم معجبو Windbg أنها قوية جدًا وأنا أميل إلى الموافقة على ذلك.ولكن عندما يتعلق الأمر بتصحيح أخطاء حاويات STL، فأنا دائمًا عالق.إذا كان المتغير موجودًا على المكدس، فإن !stl أحيانًا ما يكتشف الامتداد ذلك، ولكن عندما تكون الحاوية ذات نوع معقد (على سبيل المثال. std::vector<TemplateField, std::allocator<TemplateField> >) موجود في الكومة أو جزء من بنية أخرى، ولا أعرف كيفية عرض محتوياته.

نقدر أي نصائح، مؤشرات.

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

المحلول

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

نصائح أخرى

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

ملحق بايثون لـ WinDbg (pykd) لديك مقتطف stlp.py والتي يمكنها تفريغ محتويات الخريطة.
وهو يدعم حاليًا تنفيذ خريطة STLPort.تم اختباره على x86 وx64.هذا شرط يوضح كيفية استخدامه (باللغة الروسية، ولكن الأمثلة واضحة بذاتها).

كان لدي نفس السؤال بالضبط منذ بعض الوقت.إجابتي هي أن Visual Studio هو حقًا مصحح أخطاء أفضل لـ STL والأنواع المعقدة (تمامًا مثل Visual Studio هو مجرد مصحح أخطاء أفضل من MDbg).

هذا لا يعني أن WinDBG أقل قوة، فقط أنه ذو مستوى أقل (على سبيل المثال.حاول القيام بأي شيء مفيد مع عمليات تفريغ الأعطال باستخدام Visual Studio - لا يمكنك ذلك).

على أية حال، للإجابة على سؤالك، يمكنك استخدام Visual Studio لإلقاء نظرة على أنواع البيانات باستخدام بعض الحيل:

  1. ابدأ مثيلًا آخر لـ WinDBG، وأرفقه بشكل غير جراحي: cdb -p <PID> -pv.سيؤدي هذا إلى تعليق مؤشرات الترابط الخاصة بالمصحح.يمكنك الآن فصل WinDBG الأصلي بأمان qd
  2. قم بإرفاق Visual Studio به، ثم قم بفصل WinDBG غير التدخلي qd.انظر إلى المحكمة الخاصة بلبنان وتابع كما يحلو لك.
  3. عندما تحتاج إلى العودة إلى WinDBG، انتقل إلى الخطوة 1، واستبدل باستخدام WinDBG الغازية.

عادةً ما ينتهي بي الأمر بالالتصاق بـ toString() الطريقة في الكثير من فصولي.يعرض هذا جميع المعلومات التي أعتبرها مهمة، ويمكن لأي حاوية بعد ذلك الاتصال بهذا لعرض معلومات الفصل في وحدة التحكم

استخدم dt -r ie dt yourapp! class 7ffdf000 -r5

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