سؤال

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

<اقتباس فقرة>   

وبيثون فادح خطأ: كائن GC تتبع بالفعل

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

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

المحلول

نعم، يمكنك أن تفعل هذا النوع من الشيء:

(gdb) print PyRun_SimpleString("import traceback; traceback.print_stack()")
  File "<string>", line 1, in <module>
  File "/var/tmp/foo.py", line 2, in <module>
    i**2
  File "<string>", line 1, in <module>
$1 = 0

وكما ينبغي أن يكون من الممكن استخدام الأمر pystack المحددة في بيثون <لأ href = "http://svn.python.org/view/python/trunk/Misc/gdbinit؟view=auto" يختلط = "noreferrer "> gdbinit الملف، لكنه لا يعمل بالنسبة لي. لقد مناقشته هنا إذا كنت ترغب في النظر في ذلك.

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

نصائح أخرى

إذا كان لديك ماك أو مربع الشمس الركل من حولك يمكن استخدام dtrace و نسخة من الثعبان جمعتها مع dtrace لمعرفة ما طلب كان يقوم به في ذلك الوقت. ملاحظة: في 10.5 الثعبان هو ما قبل تجميعها مع dtrace التي هي لطيفة حقا ومفيد

وإذا لم يكن ذلك متاحا لك، ثم يمكنك <لأ href = "http://www.python.org/doc/2.5.2/lib/module-gc.html" يختلط = "نوفولو noreferrer" > القيادة العامة استيراد و تمكين التصحيح التي يمكنك بعد ذلك وضع إلى ملف السجل.

لإجابة على سؤالك تحديدا فيما يتعلق التصحيح مع GDB قد ترغب في قراءة " التصحيح مع GDB "على ويكي الثعبان.

إذا كنت تستخدم CDLL التفاف مكتبة C في بيثون، وهذا هو لينكس 64 بت، وهناك فرصة جيدة لأنك كنت CDLL المجمع مكونا بشكل غير صحيح. التخلف CDLL إلى int أنواع العائد على جميع المنصات (ينبغي أن تكون طويلة طويلة على أنظمة 64 بت)، ويتوقع فقط أن تمر الحجج الصحيحة. قد تحتاج إلى التحقق من المجمع CDLL في هذه الحالة ...

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