سؤال

وهناك زميل في العمل لديه برنامج C فشل ذلك بطريقة يمكن التنبؤ بها بسبب بعض الذاكرة تالفة. وترغب في استخدام dbx لمراقبة موقع الذاكرة بمجرد تخصيصها من أجل تحديد الرمز الذي يسبب الفساد.

هل هذا ممكن؟ إذا كان الأمر كذلك فما هو بناء الجملة لإنتاج نقطة توقف في لحظة من الفساد؟

إذا لم يكن كذلك، ما من شأنه أن يكون نهجا جيدا لتحديد هذا النوع من القضية؟

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

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

المحلول

وبعد أن بدا أكثر عمقا، يبدو الحل في الإصدارات الأخيرة من dbx شيء مثل:

stop access w <address>, <size>

ومنذ <address> و<size> يمكن أن يكون التعبيرات، يمكنك كتابة الأوامر مثل:

stop access w &p, sizeof(int)

وهذا يفترض p هو مؤشر ونريد لمراقبة الكلمة الأولى يشير إلى.

ولقد شغلت أيضا عبر غرامة تعليمي على تتبع والدوس البق الذاكرة. ويستخدم gdb بدلا من dbx، ولكن يجب أن مبادئ تكون هي نفسها.

نصائح أخرى

في AIX، التي تريد استخدامها stophwp:

(dbx) help stophwp

stophwp <address> <size>

        Stop execution when the contents of the specified
        memory region change.  This is a accomplished in
        hardware and may not be available on all models.

وأنا لا ديف سولاريس، ولكن يمكنك القيام بذلك مع جدب والأجهزة نقاط

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