فالغريند
هذا هو الأمر valgrind الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
valgrind - مجموعة من الأدوات لتصحيح الأخطاء وبرامج التنميط
موجز
فالغريند [خيارات valgrind] [برنامجك] [خيارات برنامجك]
الوصف
Valgrind هو برنامج مرن لتصحيح الأخطاء وتنميط الملفات التنفيذية لينكس. يتكون
الأساسية ، والتي توفر وحدة معالجة مركزية اصطناعية في البرنامج ، وسلسلة من تصحيح الأخطاء و
أدوات التنميط. الهيكلية معيارية ، بحيث يمكن إنشاء أدوات جديدة بسهولة و
دون الإخلال بالهيكل الحالي.
تعمل بعض الخيارات الموضحة أدناه مع جميع أدوات Valgrind والبعض الآخر يعمل فقط مع
قليل أو واحد. القسم خيارات MEMCHECK وتلك التي تليه تصف أداة محددة
خيارات.
تغطي صفحة الدليل هذه الاستخدام والخيارات الأساسية فقط. لمزيد من المعلومات الشاملة ،
يرجى الاطلاع على وثائق HTML على نظامك:
$ INSTALL / share / doc / valgrind / html / index.html ، أو عبر الإنترنت:
http://www.valgrind.org/docs/manual/index.html.
TOOL اختيار OPTIONS
الخيار الوحيد الأكثر أهمية.
--أداة = [إفتراضي: فحص الذاكرة]
قم بتشغيل أداة Valgrind التي تسمى اسم الأداة، على سبيل المثال memcheck ، cachegrind ، callgrind ، helgrind ،
drd و massif و allowey و none و exp-sgcheck و exp-bbv و exp-dhat وما إلى ذلك.
أساسي OPTIONS
تعمل هذه الخيارات مع جميع الأدوات.
-h --مساعدة
إظهار المساعدة لجميع الخيارات ، سواء بالنسبة للجوهر أو للأداة المحددة. إذا كان الخيار
يتكرر فهو يعادل العطاء --مساعدة التصحيح.
--مساعدة التصحيح
مثل --مساعدة، ولكنه يسرد أيضًا خيارات التصحيح التي عادةً ما تكون مفيدة فقط لـ
مطورو Valgrind.
--الإصدار
اعرض رقم إصدار نواة Valgrind. يمكن أن يكون للأدوات نسختها الخاصة
أعداد. هناك مخطط معمول به لضمان تنفيذ الأدوات فقط عندما تكون النواة
الإصدار هو أحد المعروفين للعمل معه. تم ذلك لتقليل فرص
مشاكل غريبة تنشأ عن عدم توافق إصدار الأداة مقابل الإصدار الأساسي.
-q, --هادئ
تشغيل بصمت ، وطباعة رسائل الخطأ فقط. مفيد إذا كنت تقوم بتشغيل الانحدار
اختبارات أو لديها بعض آلات الاختبار الآلي الأخرى.
-v, - الإسراف
كن أكثر إسهابًا. يعطي معلومات إضافية حول جوانب مختلفة من برنامجك ، مثل:
تحميل الكائنات المشتركة ، والقمع المستخدمة ، وتقدم الأجهزة
ومحركات التنفيذ والتحذيرات من السلوك غير المعتاد. تكرار الخيار
يزيد من مستوى الإسهاب.
- تتبع الأطفال = [إفتراضي: لا]
عند التمكين ، سيتتبع Valgrind العمليات الفرعية التي بدأت عبر ملف EXEC نظام
يتصل. هذا ضروري للبرامج متعددة العمليات.
لاحظ أن Valgrind يتتبع الطفل من a شوكة (سيكون من الصعب عدم القيام بذلك ،
منذ شوكة يقوم بعمل نسخة متطابقة من العملية) ، لذلك يمكن القول أن هذا الخيار سيء
اسم الشيئ. ومع ذلك ، فإن معظم أطفال شوكة المكالمات الاتصال على الفور EXEC على أي حال.
--تتبع-الأطفال-تخطي = patt1 ، patt2 ، ...
هذا الخيار له تأثير فقط عندما - تتبع الأطفال = نعم محدد. يسمح ل
يتم تخطي بعض الأطفال. يأخذ الخيار قائمة أنماط مفصولة بفواصل لـ
أسماء الملفات التنفيذية التابعة التي لا يجب على Valgrind تتبعها. قد أنماط
تشمل الحروف الأولية؟ و * ، والتي لها المعنى المعتاد.
يمكن أن يكون هذا مفيدًا لتقليم الفروع غير المهمة من شجرة العمليات
تشغيل على Valgrind. لكن يجب أن تكون حذرا عند استخدامه. عندما يتخطى Valgrind البحث عن المفقودين
إلى ملف تنفيذي ، فهو لا يتخطى فقط تتبع ذلك الملف القابل للتنفيذ ، بل يتخطى أيضًا
تتبع أي من العمليات التابعة لذلك الملف القابل للتنفيذ. بمعنى آخر ، العلم لا يفعل ذلك
مجرد التسبب في توقف التتبع عند الملفات التنفيذية المحددة - فهو يتخطى تتبع ملفات
عملية كاملة جذورها في أي من الملفات التنفيذية المحددة.
--تتبع-الأطفال-تخطي-ب-أرج = patt1 ، patt2 ، ...
هذا هو نفس --تتبع-الأطفال-تخطي، مع اختلاف واحد: القرار بشأن
يتم إجراء التتبع في عملية الطفل من خلال فحص الحجج المقدمة للطفل
العملية ، بدلاً من اسم الملف القابل للتنفيذ.
- طفل-صامت-بعد-شوكة = [إفتراضي: لا]
عند التمكين ، لن تظهر Valgrind أي إخراج تصحيح أو تسجيل للطفل
العملية الناتجة عن أ شوكة يتصل. هذا يمكن أن يجعل الإخراج أقل إرباكًا (على الرغم من أن
أكثر تضليلًا) عند التعامل مع العمليات التي تخلق الأطفال. بشكل خاص
مفيد بالتزامن مع - تتبع الأطفال =. استخدام هذا الخيار هو أيضا بقوة
يوصى به إذا كنت تطلب إخراج XML (--xml = نعم) ، بما أن XML من
قد يختلط الطفل والوالد ، مما يجعل الأمر عديم الفائدة عادة.
--vgdb = [إفتراضي: نعم]
سيوفر Valgrind وظيفة "gdbserver" عندما --vgdb = نعم or --vgdb = ممتلئ is
محدد. يسمح هذا لمصحح أخطاء GNU GDB خارجي بالتحكم في برنامجك وتصحيحه
عندما يتم تشغيله على Valgrind. --vgdb = ممتلئ تتكبد نفقات أداء كبيرة ، ولكن
يوفر نقاط توقف ونقاط مراقبة أكثر دقة. انظر تصحيح أخطاء البرنامج باستخدام ملفات
gdbserver و GDB من Valgrind للحصول على وصف تفصيلي.
إذا تم تمكين gdbserver المضمن ولكن لم يتم استخدام gdb حاليًا ، فإن ملف vgdb
يمكن لأداة سطر الأوامر إرسال "أوامر المراقبة" إلى Valgrind من قذيفة. ال
يوفر Valgrind core مجموعة من أوامر مراقبة Valgrind. يمكن لأداة اختياريا
توفير أوامر مراقبة خاصة بالأداة ، والتي يتم توثيقها في الأداة المحددة
الفصل.
--vgdb- خطأ = [إفتراضي: 999999999]
استخدم هذا الخيار عندما يتم تمكين Valgrind gdbserver مع --vgdb = نعم or --vgdb = ممتلئ.
الأدوات التي تبلغ عن الأخطاء ستنتظر حتى يتم الإبلاغ عن الأخطاء "العددية" قبل التجميد
البرنامج وانتظارك للتواصل مع GDB. ويترتب على ذلك أن القيمة صفر
سيؤدي إلى بدء تشغيل gdbserver قبل تنفيذ برنامجك. هذا هو
تُستخدم عادةً لإدراج نقاط توقف GDB قبل التنفيذ ، وتعمل أيضًا مع الأدوات
التي لا تبلغ عن أخطاء ، مثل ماسيف.
--vgdb-stop-at = [إفتراضي: لا أحد]
استخدم هذا الخيار عندما يتم تمكين Valgrind gdbserver مع --vgdb = نعم or --vgdb = ممتلئ.
سيتم استدعاء Valgrind gdbserver لكل خطأ بعد ذلك - vgdb- خطأ وكانت
ذكرت. يمكنك أيضًا أن تطلب من Valgrind gdbserver أن يتم استدعاءه للآخرين
الأحداث المحددة بإحدى الطرق التالية:
· قائمة مفصولة بفواصل من واحد أو أكثر من بدء التشغيل خروج Valgrindabexit.
القيم بدء التشغيل خروج Valgrindabexit على التوالي تشير إلى استدعاء gdbserver
قبل تنفيذ البرنامج ، بعد آخر تعليمات لبرنامجك ، بتاريخ
فالجريند خروج غير طبيعي (مثل خطأ داخلي ، نفاد الذاكرة ، ...).
ملحوظة: بدء التشغيل و --vgdb- خطأ = 0 سيؤدي كلاهما إلى استدعاء Valgrind gdbserver
قبل تنفيذ برنامجك. ال --vgdb- خطأ = 0 سوف يتسبب بالإضافة إلى ذلك الخاص بك
برنامج للتوقف عن جميع الأخطاء اللاحقة.
· الكل لتحديد المجموعة الكاملة. إنه يعادل
--vgdb-stop-at = بدء التشغيل ، الخروج ، valgrindabexit.
· لا شيء للمجموعة الفارغة.
--track-fds = [إفتراضي: لا]
عند التمكين ، سيقوم Valgrind بطباعة قائمة بأوصاف الملفات المفتوحة عند الإنهاء أو عند التشغيل
الطلب عبر الأمر gdbserver monitor v.info open_fds. جنبا إلى جنب مع كل ملف
تتم طباعة واصف المسار الخلفي للمكدس حيث تم فتح الملف وأي تفاصيل
المتعلقة بواصف الملف مثل اسم الملف أو تفاصيل المقبس.
- الطابع الزمني = [إفتراضي: لا]
عند التمكين ، تُسبق كل رسالة بإشارة إلى الساعة المنقضية على الحائط
الوقت منذ بدء التشغيل ، معبرًا عنه بالأيام والساعات والدقائق والثواني والميلي ثانية.
--log-fd = [إفتراضي: 2, ستدير]
يحدد أن Valgrind يجب أن ترسل جميع رسائلها إلى الملف المحدد
واصف. الافتراضي ، 2 ، هو قناة الخطأ القياسية (stderr). لاحظ أن هذا قد
تتداخل مع استخدام العميل الخاص لـ stderr ، كما سيكون ناتج Valgrind
معشق مع أي إخراج يرسله العميل إلى stderr.
--log- ملف =
يحدد أن Valgrind يجب أن ترسل جميع رسائلها إلى الملف المحدد. إذا كان
اسم الملف فارغ ، يؤدي إلى إحباط. هناك ثلاثة محددات تنسيق خاصة
يمكن استخدامها في اسم الملف.
%p معرّف العملية الحالي. هذا مفيد جدا للبرنامج
استدعاء عمليات متعددة. تحذير: إذا كنت تستخدم - تتبع الأطفال = نعم وبرنامجك
استدعاء عمليات متعددة أو مفترقات برنامجك دون استدعاء exec بعد ذلك ، و
لا تستخدم هذا المحدد (أو ملف %q المحدد أدناه) ، فإن إخراج Valgrind من الكل
ستدخل هذه العمليات في ملف واحد ، وربما مختلطة ، وربما غير مكتملة.
٪ q {FOO} بمحتويات متغير البيئة فو. إذا كان {فو}
الجزء مشوه ، يتسبب في إجهاض. نادرا ما تكون هناك حاجة إلى هذا المحدد ، ولكن جدا
مفيد في ظروف معينة (على سبيل المثال ، عند تشغيل برامج MPI). الفكرة هي أنك
تحديد متغير سيتم تعيينه بشكل مختلف لكل عملية في الوظيفة ، لـ
مثال BPROC_RANK أو كل ما هو قابل للتطبيق في إعداد MPI الخاص بك. إذا كان اسمه
لم يتم تعيين متغير البيئة ، فإنه يتسبب في إحباط. لاحظ أنه في بعض الأصداف ، يكون ملف {
و } قد تحتاج الأحرف إلى الهروب بشرطة مائلة للخلف.
%% يتم استبداله بـ %.
إذا كان % متبوعًا بأي شخصية أخرى ، فإنه يتسبب في إجهاض.
إذا كان اسم الملف يحدد اسم ملف نسبيًا ، فسيتم وضعه في اسم البرنامج الأولي
دليل العمل: هذا هو الدليل الحالي عندما بدأ البرنامج
الإعدام بعد الشوكة أو بعد exec. إذا كان يحدد اسم ملف مطلق (مثل.
يبدأ بـ "/") ثم يتم وضعه هناك.
--مقبس لوغ =
يحدد أن Valgrind يجب أن ترسل جميع رسائلها إلى المنفذ المحدد في
عنوان IP المحدد. قد يتم حذف المنفذ ، وفي هذه الحالة يتم استخدام المنفذ 1500. اذا كان
لا يمكن إجراء الاتصال بالمقبس المحدد ، يعود Valgrind إلى الكتابة
الإخراج إلى الخطأ القياسي (stderr). هذا الخيار مخصص للاستخدام في
بالتزامن مع برنامج valgrind-listener. لمزيد من التفاصيل ، راجع
التعليق في الدليل.
ذات الصلة بالأخطاء OPTIONS
يتم استخدام هذه الخيارات من قبل جميع الأدوات التي يمكنها الإبلاغ عن الأخطاء ، مثل Memcheck ، ولكن لا
كاشغريند.
--xml = [إفتراضي: لا]
عند التمكين ، ستكون الأجزاء المهمة من الإخراج (مثل رسائل خطأ الأداة) موجودة
تنسيق XML بدلاً من النص العادي. علاوة على ذلك ، سيتم إرسال مخرجات XML إلى ملف
قناة إخراج مختلفة عن إخراج النص العادي. لذلك ، يجب عليك أيضًا استخدام واحد
of --xml-fd, - ملف- xml or - مقبس xml لتحديد مكان إرسال XML.
ستستمر طباعة الرسائل الأقل أهمية في نص عادي ، ولكن بسبب XML
يتم إرسال الإخراج وإخراج النص العادي إلى قنوات الإخراج المختلفة (وجهة
لا يزال يتم التحكم في إخراج النص العادي بواسطة --log-fd, --ملف تسجيل و --لوج مقبس)
هذا لا ينبغي أن يسبب مشاكل.
يهدف هذا الخيار إلى تسهيل الحياة للأدوات التي تستهلك مخرجات Valgrind كملفات
الإدخال ، مثل الواجهات الأمامية لواجهة المستخدم الرسومية. يعمل هذا الخيار حاليًا مع Memcheck و Helgrind و
DRD و SG يتم تحديد تنسيق الإخراج في الملف
docs / internals / xml-output-protocol4.txt في شجرة المصدر لـ Valgrind 3.5.0 أو
في وقت لاحق.
الخيارات الموصى بها لتمرير واجهة المستخدم الرسومية ، عند طلب إخراج XML ، هي: --xml = نعم
لتمكين إخراج XML ، - ملف- xml لإرسال مخرجات XML إلى (من المفترض تحديد واجهة المستخدم الرسومية)
ملف، --ملف تسجيل لإرسال إخراج النص العادي إلى ملف آخر محدد بواجهة المستخدم الرسومية ،
- طفل-صامت-بعد-شوكة = نعمو -q لتقييد إخراج النص العادي بالحرج
رسائل الخطأ التي أنشأتها Valgrind نفسها. على سبيل المثال ، الفشل في قراءة المحدد
يُحسب ملف suppressions كرسالة خطأ فادحة. بهذه الطريقة ، من أجل نجاح
تشغيل ملف الإخراج النصي سيكون فارغًا. ولكن إذا لم يكن فارغًا ، فسيحتوي على
المعلومات المهمة التي يجب أن يكون مستخدم واجهة المستخدم الرسومية على علم بها.
--xml-fd = [إفتراضي: -1، معاق]
يحدد أن Valgrind يجب أن ترسل مخرجات XML الخاصة بها إلى واصف الملف المحدد.
يجب استخدامه بالتزامن مع --xml = نعم.
--xml- ملف =
يحدد أن Valgrind يجب أن ترسل إخراج XML الخاص بها إلى الملف المحدد. يجب ان يكون
تستخدم بالتزامن مع --xml = نعم. أي %p or %q تسلسل يظهر في اسم الملف
يتم توسيعها بنفس الطريقة تمامًا كما يتم توسيعها --ملف تسجيل. انظر الوصف
of --ملف تسجيل للتفاصيل.
- xml- مقبس =
يحدد أن Valgrind يجب أن يرسل ناتج XML الخاص به إلى المنفذ المحدد في
عنوان IP. يجب استخدامه بالتزامن مع --xml = نعم. شكل الحجة
هو نفسه الذي يستخدمه --لوج مقبس. انظر وصف --لوج مقبس لمزيد من
تفاصيل.
--xml-user-comment =
يدمج سلسلة تعليق مستخدم إضافية في بداية إخراج XML. يعمل فقط عندما
--xml = نعم محدد؛ تجاهله على خلاف ذلك.
- الشكل = [إفتراضي: نعم]
تمكين / تعطيل فك التشابك التلقائي (فك التشفير) لأسماء C ++. ممكن بشكل افتراضي. متى
ممكّنًا ، سيحاول Valgrind ترجمة أسماء C ++ المشفرة إلى شيء ما
تقترب من الأصل. يتعامل برنامج demangler مع الرموز المشوهة بإصدارات 2.X من g ++ ،
3.X و 4.X.
حقيقة مهمة حول فك التشابك هي أن أسماء الوظائف مذكورة في عمليات القمع
يجب أن تكون الملفات في شكلها المشوه. لا يقوم Valgrind بفك تشابك أسماء الوظائف عندما
البحث عن عمليات قمع قابلة للتطبيق ، لأن القيام بخلاف ذلك سيؤدي إلى قمع
تعتمد محتويات الملف على حالة آلات فك التشابك في Valgrind ، وكذلك بطيئة
مطابقة قمع لأسفل.
- عدد المتصلين = [إفتراضي: 12]
يحدد الحد الأقصى لعدد الإدخالات المعروضة في تتبعات المكدس التي تحدد البرنامج
المواقع. لاحظ أن الأخطاء شائعة عند استخدام مواقع الوظائف الأربعة الأولى فقط
(المكان في الوظيفة الحالية ، ومكان المتصلين الفوريين الثلاثة). إذا هذا
لا يؤثر على العدد الإجمالي للأخطاء المبلغ عنها.
الحد الأقصى لقيمة هذا هو 500. لاحظ أن الإعدادات الأعلى ستجعل Valgrind يقوم بتشغيل ملف
أبطأ قليلاً ويستغرق المزيد من الذاكرة ، ولكن يمكن أن يكون مفيدًا عند العمل مع
البرامج ذات سلاسل المكالمات المتداخلة بعمق.
- unw-stack-scan-thresh = [إفتراضي: 0] , - unw-stack-scan-Frames = [إفتراضي:
5]
دعم مسح المكدس متاح فقط لأهداف ARM.
تعمل هذه العلامات على تمكين فك المكدس والتحكم فيه عن طريق مسح المكدس. عندما يكون طبيعيا
كومة آليات فك اللفة - استخدام سجلات Dwarf CFI ، ويتبع مؤشر الإطار
- فشل ، قد يكون مسح المكدس قادرًا على استعادة تتبع المكدس.
لاحظ أن مسح المكدس هو آلية توجيهية غير دقيقة قد تعطي الكثير
نتائج مضللة ، أو لا شيء على الإطلاق. يجب استخدامه فقط في حالات الطوارئ ، عندما تكون طبيعية
فشل الفك ، ومن المهم مع ذلك أن يكون لديك آثار مكدس.
مسح المكدس هو أسلوب بسيط: يقرأ أداة فك اللف الكلمات من المكدس ، و
يحاول تخمين أي منها قد يكون عناوين إرجاع ، عن طريق التحقق لمعرفة ما إذا كانت
نقطة مباشرة بعد تعليمات استدعاء ARM أو الإبهام. إذا كان الأمر كذلك ، تتم إضافة الكلمة إلى ملف
تتبع خلفي.
يحدث الخطر الرئيسي عند عودة استدعاء الوظيفة ، وترك عنوان المرسل الخاص به
مكشوف ، ويتم استدعاء وظيفة جديدة ، لكن الوظيفة الجديدة لا تحل محل القديم
عنوان. والنتيجة هي أن التتبع الخلفي قد يحتوي على إدخالات للوظائف
التي عادت بالفعل ، لذا كن محيرًا للغاية.
القيد الثاني لهذا التنفيذ هو أنه سيفحص الصفحة فقط (4 كيلوبايت ،
عادةً) تحتوي على مؤشر كومة البداية. إذا كانت إطارات المكدس كبيرة ، فهذا
قد يؤدي إلى وجود عدد قليل فقط (أو حتى عدم وجود أي منها) في التتبع. أيضا ، إذا كنت
غير محظوظين ولديهم مؤشر مكدس أولي بالقرب من نهاية الصفحة التي تحتوي عليها ، و
مسح قد يفوت جميع الإطارات المثيرة للاهتمام.
بشكل افتراضي ، يتم تعطيل مسح المكدس. حالة الاستخدام العادية هي السؤال عنها عندما يكون ملف
وإلا فسيكون تتبع المكدس قصيرًا جدًا. لذلك ، لتمكينه ، استخدم
- unw-stack-scan-thresh = الرقم. يطلب هذا من Valgrind محاولة استخدام مسح المكدس إلى
تتبعات المكدس "الموسعة" التي تحتوي على أقل من عدد الإطارات.
إذا تم مسح المكدس ، فسيؤدي ذلك فقط إلى إنشاء عدد الإطارات على الأكثر
المحددة من قبل إطارات مسح unw-stack-scan. عادةً ما يولد مسح المكدس الكثير
إدخالات القمامة التي يتم تعيين هذه القيمة على قيمة منخفضة (5) افتراضيًا. في أي حال من الأحوال سوف
يتم إنشاء تتبع مكدس أكبر من القيمة المحددة بواسطة --num-callers.
- حد الخطأ = [إفتراضي: نعم]
عند التمكين ، يتوقف Valgrind عن الإبلاغ عن الأخطاء بعد 10,000,000 إجمالاً ، أو 1,000،XNUMX
مختلفة ، شوهدت. هذا لإيقاف آلات تتبع الأخطاء من
أصبح عبئًا كبيرًا في الأداء في البرامج مع العديد من الأخطاء.
--رمز خروج الخطأ = [إفتراضي: 0]
يحدد رمز خروج بديل لإرجاعه إذا أبلغت Valgrind عن أي أخطاء في ملف
يجري. عند التعيين على القيمة الافتراضية (صفر) ، فإن القيمة المرجعة من Valgrind ستظل دائمًا
تكون القيمة المرجعة للعملية التي تتم محاكاتها. عند التعيين على قيمة غير صفرية ، فإن ذلك
يتم إرجاع القيمة بدلاً من ذلك ، إذا اكتشف Valgrind أي أخطاء. هذا مفيد للاستخدام
Valgrind كجزء من مجموعة اختبار مؤتمتة ، لأنها تجعل من السهل اكتشاف الاختبار
الحالات التي أبلغت Valgrind عن أخطاء فيها ، فقط عن طريق فحص رموز الإرجاع.
- علامات الخطأ = و [إفتراضي: لا أحد]
عندما يتم إخراج الأخطاء كنص عادي (على سبيل المثال ، XML غير مستخدم) ، - علامات الخطأ يرشد ل
إخراج سطر يحتوي على بدأ (النهاية) قبل (بعد) كل خطأ.
تسهل خطوط التحديد هذه البحث عن الأخطاء و / أو استخراج الأخطاء في ملف
ملف الإخراج الذي يحتوي على أخطاء valgrind مختلطة مع إخراج البرنامج.
لاحظ أن العلامات الفارغة مقبولة. لذلك ، استخدام علامة البداية (أو النهاية) فقط هو
ممكن.
- تشخيصات سيجيل = [إفتراضي: نعم]
تمكين / تعطيل طباعة تشخيص التعليمات غير القانونية. يتم التمكين افتراضيًا ، ولكن
الافتراضي إلى تعطيل عندما --هادئ معطى. يمكن دائمًا أن يكون الإعداد الافتراضي صريحًا
تم تجاوزه بإعطاء هذا الخيار.
عند التمكين ، ستتم طباعة رسالة تحذير مع بعض التشخيصات في أي وقت
تمت مصادفة تعليمات لا تستطيع Valgrind فك ترميزها أو ترجمتها ، قبل
يتم إعطاء البرنامج إشارة SIGILL. غالبًا ما تشير التعليمات غير القانونية إلى وجود خطأ في ملف
برنامج أو دعم مفقود لتعليمات معينة في Valgrind. ولكن بعض
تحاول البرامج عمدًا تنفيذ تعليمات قد تكون مفقودة ومصيدة
إشارة SIGILL لاكتشاف ميزات المعالج. باستخدام هذا العلم يجعل من الممكن
تجنب مخرجات التشخيص التي قد تحصل عليها في مثل هذه الحالات.
- عرض دون الرئيسي = [إفتراضي: لا]
بشكل افتراضي ، لا تُظهر تتبعات المكدس للأخطاء أي وظائف تظهر تحتها رئيسي
لأنه في معظم الأحيان تكون مواد مكتبة C و / أو gobbledygook غير مثيرة للاهتمام.
أو بدلاً من ذلك رئيسي غير موجود في تتبع المكدس ، لن تظهر آثار المكدس
أي وظائف أدناه رئيسي-مثل الوظائف مثل glibc __libc_start_main.
وعلاوة على ذلك، إذا رئيسي-مثل الدوال الموجودة في التتبع ، يتم تطبيعها كـ
(أدناه رئيسي)، من أجل جعل الناتج أكثر حتمية.
إذا تم تمكين هذا الخيار ، فسيتم عرض كافة إدخالات تتبع المكدس و رئيسي-مثل
لن يتم تطبيع الوظائف.
--fullpath-after = [إفتراضي: لا إظهار مصدر مسارات]
بشكل افتراضي ، يعرض Valgrind فقط أسماء الملفات في تتبعات المكدس ، ولكن ليس المسارات الكاملة لـ
ملفات المصدر. عند استخدام Valgrind في المشاريع الكبيرة حيث تتواجد المصادر
عدة أدلة مختلفة ، يمكن أن يكون هذا غير مريح. - مسار كامل بعد ويوفر
حل مرن لهذه المشكلة. عندما يكون هذا الخيار موجودًا ، فإن المسار إلى كل منهما
يتم عرض ملف المصدر ، مع التحذير الأكثر أهمية التالي: if سلسلة وجدت في
المسار ، ثم المسار وصولاً إلى بما في ذلك سلسلة تم حذفه ، وإلا يظهر المسار
غير معدل. لاحظ أن سلسلة ليس مطلوبًا أن يكون بادئة للمسار.
على سبيل المثال ، ضع في اعتبارك ملفًا باسم /home/janedoe/blah/src/foo/bar/xyzzy.c. التحديد
--fullpath-after = / home / janedoe / blah / src / سيؤدي إلى إظهار Valgrind الاسم كـ
foo / bar / xyzzy.c.
لأن السلسلة غير مطلوبة لتكون بادئة ، --fullpath-after = src / سوف ينتج
نفس الإخراج. يكون هذا مفيدًا عندما يحتوي المسار على تعسفي تم إنشاؤه آليًا
الشخصيات. على سبيل المثال ، يمكن أن يكون المسار / my / build / dir / C32A1B47 / blah / src / foo / xyzzy
مجردة إلى foo / xyzzy باستخدام --fullpath-after = / بلاه / src /.
إذا كنت تريد ببساطة رؤية المسار الكامل ، فما عليك سوى تحديد سلسلة فارغة:
--fullpath-after =. هذه ليست حالة خاصة ، إنها مجرد نتيجة منطقية لـ
فوق القواعد.
أخيرًا ، يمكنك استخدام - مسار كامل بعد عدة مرات. أي ظهور له يسبب
Valgrind للتبديل إلى إنتاج مسارات كاملة وتطبيق قاعدة التصفية أعلاه. كل
يتم مقارنة المسار الناتج مع كل - مسار كامل بعدسلاسل محددة ، في
الطلب المحدد. تؤدي السلسلة الأولى التي يتم مطابقتها إلى قطع المسار كـ
موصوف بالاعلى. إذا لم يكن هناك تطابق ، يظهر المسار الكامل. هذا يسهل التقطيع
البادئات عندما يتم استخلاص المصادر من عدد من الأدلة غير ذات الصلة.
--extra-debuginfo-path = [إفتراضي: غير محدد و غير مستعمل]
بشكل افتراضي ، يبحث Valgrind في العديد من المسارات المعروفة عن كائنات التصحيح ، مثل
/ usr / lib / debug /.
ومع ذلك ، قد تكون هناك سيناريوهات حيث قد ترغب في وضع كائنات التصحيح في
موقع عشوائي ، مثل التخزين الخارجي عند تشغيل Valgrind على جهاز محمول
مع سعة تخزين محلية محدودة. مثال آخر قد يكون حالة ليس لديك فيها
إذن لتثبيت حزم كائن التصحيح على النظام الذي تقوم بتشغيله
فالغريند.
في هذه السيناريوهات ، قد تقدم مسارًا مطلقًا كمكان إضافي نهائي لـ
Valgrind للبحث عن كائنات التصحيح بتحديد
--extra-debuginfo-path = / path / to / debug / كائنات. سيتم إضافة المسار المحدد إلى
اسم المسار المطلق للكائن الذي تم البحث عنه. على سبيل المثال ، إذا كانت Valgrind تبحث عن ملفات
معلومات التصحيح لـ /w/x/y/zz.so و --extra-debuginfo-path = / a / b / c محدد ، سوف
ابحث عن كائن التصحيح في /a/b/c/w/x/y/zz.so.
يجب تحديد هذه العلامة مرة واحدة فقط. إذا تم تحديده عدة مرات ، فقط ملف
تم تكريم آخر مثال.
--debuginfo-server = ipaddr: port [إفتراضي: غير محدد و غير مستعمل]
هذه ميزة تجريبية جديدة تم تقديمها في الإصدار 3.9.0.
في بعض السيناريوهات ، قد يكون من الملائم قراءة معلومات التصحيح من العناصر المخزنة في ملف
آلة مختلفة. باستخدام هذه العلامة ، سيقوم Valgrind بالاستعلام عن خادم معلومات تصحيح يعمل على
ipaddr والاستماع على منفذ المنفذ ، إذا لم يتمكن من العثور على كائن debuginfo في المحلي
نظام الملفات.
يجب أن يقبل خادم معلومات التصحيح اتصالات TCP على منفذ المنفذ. خادم معلومات التصحيح هو
الواردة في الملف المصدر auxprogs / valgrind-di-server.c. سوف يخدم فقط من
الدليل الذي تم تشغيله فيه. يتم تعيين المنفذ افتراضيًا على 1500 في كل من العميل والخادم إذا
غير محدد.
إذا كان Valgrind يبحث عن معلومات التصحيح لـ /w/x/y/zz.so باستخدام خادم معلومات التصحيح ، فإنه
سيؤدي إلى تجريد مكونات اسم المسار ومجرد طلب zz.so على الخادم. أنه في
بدوره سيبحث فقط في دليل العمل الحالي الخاص به عن كائن debuginfo مطابق.
يتم إرسال بيانات تصحيح الأخطاء في أجزاء صغيرة (8 كيلوبايت) حسب طلب Valgrind.
يتم ضغط كل كتلة باستخدام LZO لتقليل وقت الإرسال. تم التنفيذ
تم ضبطه للحصول على أفضل أداء عبر ارتباط شبكة 802.11g (WiFi) أحادي المرحلة.
لاحظ أنه يتحقق من مطابقة الكائنات الأساسية مقابل كائنات التصحيح باستخدام GNU debuglink CRC
المخطط ، حتى عند استخدام خادم debuginfo. لتعطيل هذا الفحص ،
تحتاج أيضًا إلى تحديد --allow-mismatched-debuginfo = نعم.
بشكل افتراضي ، سيقوم نظام بناء Valgrind ببناء valgrind-di-server للهدف
النظام الأساسي ، وهو بالتأكيد ليس ما تريده. حتى الآن لم نتمكن من ذلك
تعرف على كيفية الحصول على automake / autoconf لإنشائه لمنصة الإنشاء. إذا أردت
لاستخدامه ، سيتعين عليك إعادة ترجمته يدويًا باستخدام الأمر الموضح في الجزء العلوي
auxprogs / valgrind-di-server.c.
--allow-mismatched-debuginfo = لا | نعم [لا]
عند قراءة معلومات التصحيح من كائنات معلومات التصحيح المنفصلة ، سيقوم Valgrind بالتحقق افتراضيًا
أن الكائنين main و debuginfo يتطابقان ، باستخدام آلية تصحيح GNU. هذا
يضمن أنه لا يقرأ معلومات التصحيح من كائنات معلومات تصحيح الأخطاء القديمة ، و
يضمن أيضًا أن Valgrind لا يمكن أن يتعطل نتيجة لعدم التطابق.
يمكن تجاوز هذا الاختيار باستخدام --allow-mismatched-debuginfo = نعم. هذا قد يكون
مفيد عندما لا يتم تقسيم معلومات التصحيح والكائنات الرئيسية بالطريقة الصحيحة. يكون
حذرًا عند استخدام هذا ، على الرغم من ذلك: فهو يعطل كل تدقيق التناسق و Valgrind
لوحظ أنه يتعطل عندما لا تتطابق الكائنات main و debuginfo.
- الدعم = [إفتراضي: $ PREFIX / lib / valgrind / default.supp]
يحدد ملفًا إضافيًا لقراءة أوصاف الأخطاء التي سيتم منعها. يمكنك
استخدام ما يصل إلى 100 ملف قمع إضافي.
- قمع الجيل = [إفتراضي: لا]
عند الضبط على نعم ، سيتوقف Valgrind مؤقتًا بعد كل خطأ يظهر ويطبع السطر:
---- قمع الطباعة؟ --- [إرجاع / N / n / Y / y / C / c] ----
التنظيف الجاف رفض أو N رفض or n رفض، يتسبب في استمرار Valgrind في التنفيذ دون طباعة ملف
قمع لهذا الخطأ.
التنظيف الجاف Y رفض or y رفض يتسبب Valgrind في كتابة منع لهذا الخطأ. أنت تستطيع
ثم قم بقصه ولصقه في ملف قمع إذا كنت لا تريد أن تسمع عن ملف
خطأ في المستقبل.
عند الضبط على الكل، سيقوم Valgrind بطباعة منع لكل خطأ تم الإبلاغ عنه ، بدون
الاستعلام عن المستخدم.
هذا الخيار مفيد بشكل خاص مع برامج C ++ ، حيث يطبع ملف
قمع بأسماء مشوهة ، على النحو المطلوب.
لاحظ أن عمليات القمع المطبوعة محددة قدر الإمكان. قد ترغب في المشاركة
زيادة مماثلة ، عن طريق إضافة أحرف البدل لأسماء الوظائف ، وباستخدام مستوى الإطار
البدل. مرافق wildcarding قوية لكنها مرنة ، مع القليل من
التحرير الدقيق ، فقد تتمكن من قمع مجموعة كاملة من الأخطاء ذات الصلة باستخدام
فقط عدد قليل من القمع.
في بعض الأحيان يتم قمع خطأين مختلفين من خلال نفس القمع ، وفي هذه الحالة
سيقوم Valgrind بإخراج المنع أكثر من مرة ، لكنك تحتاج فقط إلى واحد
نسخ في ملف القمع الخاص بك (ولكن وجود أكثر من واحد لن يسبب مشاكل). أيضًا،
يتم إعطاء اسم القمع كـ ؛ الاسم لا
مهم حقًا ، فهو يُستخدم فقط مع امتداد -v الخيار الذي يطبع كل القمع المستخدم
السجلات.
--input-fd = [إفتراضي: 0, ستدين]
عند استخدام - قمع الجيل = نعم، سيتوقف Valgrind عن قراءة مدخلات لوحة المفاتيح
منك عند حدوث كل خطأ. بشكل افتراضي يقرأ من الإدخال القياسي (stdin) ،
وهو ما يمثل إشكالية بالنسبة للبرامج التي تغلق stdin. هذا الخيار يسمح لك بتحديد
واصف ملف بديل يمكن من خلاله قراءة المدخلات.
--dsymutil = لا | نعم [نعم]
هذا الخيار مناسب فقط عند تشغيل Valgrind على نظام التشغيل Mac OS X.
يستخدم نظام التشغيل Mac OS X نظام ربط معلومات التصحيح المؤجل (معلومات التصحيح). عندما وجوه
الملفات التي تحتوي على معلومات تصحيح الأخطاء مرتبطة بامتداد .dylib أو ملف قابل للتنفيذ ، ويكون debuginfo
لم يتم نسخها في الملف النهائي. بدلاً من ذلك ، يجب ربط معلومات التصحيح يدويًا بواسطة
تشغيل dsymutil ، أداة مساعدة يوفرها النظام ، على الملف القابل للتنفيذ أو .dylib. ال
يتم وضع معلومات التصحيح المدمجة الناتجة في دليل بجانب الملف القابل للتنفيذ أو
.dylib ، ولكن بالامتداد dSYM.
بدافع --dsymutil = لا، سيكتشف Valgrind الحالات التي يكون فيها الدليل .dSYM إما
مفقود أو موجود ولكن لا يبدو أنه يتطابق مع الملف القابل للتنفيذ أو الملف القابل للتنفيذ المرتبط
.dylib ، على الأرجح لأنه قديم. في هذه الحالات ، سيقوم Valgrind بطباعة ملف
رسالة تحذير ولكن لا تتخذ أي إجراء آخر.
بدافع --dsymutil = نعم، سيقوم Valgrind ، في مثل هذه الحالات ، بتشغيل dsymutil تلقائيًا مثل
ضروري لتحديث معلومات التصحيح. لجميع الأغراض العملية ، إذا كنت دائمًا
تستخدم --dsymutil = نعم، فلا داعي مطلقًا لتشغيل dsymutil يدويًا أو كجزء
من نظام إنشاء تطبيقاتك ، حيث ستقوم Valgrind بتشغيله حسب الضرورة.
لن يحاول Valgrind تشغيل dsymutil على أي ملف تنفيذي أو مكتبة بتنسيق / usr /,
/ سلة مهملات /, / sbin /, /يختار، يقرر/، / sw / ، / System / ، / Library / أو / Applications / منذ إرادة dsymutil
دائما تفشل في مثل هذه الحالات. إنه يفشل على حد سواء لأن معلومات التصحيح لمثل هذا
مكونات النظام المثبتة مسبقًا غير متوفرة في أي مكان ، وأيضًا لأنها متوفرة
تتطلب امتيازات الكتابة في تلك الدلائل.
كن حذرا عند استخدام --dsymutil = نعم، لأنه سيتسبب في وجود ملفات .dSYM
الدلائل المراد حذفها وإعادة إنشائها بصمت. لاحظ أيضًا أن dsymutil تمامًا
بطيئة ، وأحيانًا مفرطة في ذلك.
- max-stackframe = [إفتراضي: 2000000]
الحجم الأقصى لإطار المكدس. إذا تحرك مؤشر المكدس بأكثر من هذا المقدار
ثم يفترض Valgrind أن البرنامج يتحول إلى مكدس مختلف.
قد تحتاج إلى استخدام هذا الخيار إذا كان برنامجك يحتوي على مصفوفات كبيرة مخصصة للمكدس.
يقوم Valgrind بتتبع مؤشر مكدس البرنامج الخاص بك. إذا تغير بأكثر من
مقدار الحد ، يفترض Valgrind أن برنامجك يتحول إلى مكدس مختلف ، و
يتصرف Memcheck بشكل مختلف عما هو الحال بالنسبة لتغيير مؤشر المكدس أصغر من
عتبة. عادة ما يعمل هذا الكشف عن مجريات الأمور بشكل جيد. ومع ذلك ، إذا كان برنامجك يخصص كبير
على المكدس ، سيتم خداع هذا الكشف عن مجريات الأمور ، وسيقوم Memcheck لاحقًا
الإبلاغ عن عدد كبير من عمليات الوصول غير الصالحة إلى المكدس. يتيح لك هذا الخيار تغيير ملف
عتبة إلى قيمة مختلفة.
يجب أن تفكر في استخدام هذا الخيار فقط إذا كان ناتج تصحيح أخطاء Valgrind يوجهك إلى
القيام بذلك. في هذه الحالة سيخبرك بالحد الجديد الذي يجب عليك تحديده.
بشكل عام ، يعد تخصيص هياكل كبيرة على المكدس فكرة سيئة ، لأنك تستطيع ذلك
تنفد مساحة المكدس بسهولة ، خاصة على الأنظمة ذات الذاكرة المحدودة أو غيرها
نتوقع دعم عدد كبير من الخيوط مع كل مجموعة صغيرة ، وكذلك بسبب
يعد فحص الأخطاء الذي تم إجراؤه بواسطة Memcheck أكثر فاعلية بالنسبة للبيانات المخصصة لكومة
من البيانات المخصصة للمكدس. إذا كان عليك استخدام هذا الخيار ، فقد ترغب في ذلك
فكر في إعادة كتابة التعليمات البرمجية الخاصة بك لتخصيصها على الكومة بدلاً من المكدس.
- مكدس رئيسي = [إفتراضي: تستخدم تيار "يوليميت" قيمة]
يحدد حجم مكدس مؤشر الترابط الرئيسي.
لتبسيط إدارة الذاكرة ، تحتفظ Valgrind بكل المساحة المطلوبة للذاكرة الرئيسية
كومة الخيط عند بدء التشغيل. هذا يعني أنه يحتاج إلى معرفة حجم الرصة المطلوب في
بدء التشغيل.
بشكل افتراضي ، يستخدم Valgrind قيمة "ulimit" الحالية لحجم المكدس ، أو 16 ميجابايت ،
أيهما أقل. في كثير من الحالات ، يعطي هذا حجم مكدس في النطاق من 8 إلى 16 ميغا بايت ،
الذي لا يفيض أبدًا لمعظم التطبيقات.
إذا كنت بحاجة إلى حجم إجمالي أكبر للمكدس ، فاستخدم - مكدسة رئيسية لتحديده. فقط قم بتعيينه
بقدر ما تحتاج ، نظرًا لأنك تحتفظ بمساحة أكبر بكثير مما تحتاج (أي مئات
بالميغابايت أكثر مما تحتاجه) يقيد مخصصات ذاكرة Valgrind وربما
تقليل الحجم الإجمالي للذاكرة التي يمكن أن يستخدمها Valgrind. هذا فقط حقا من
أهمية على أجهزة 32 بت.
في نظام Linux ، يمكنك طلب حزمة بحجم يصل إلى 2 جيجابايت. سيتوقف Valgrind مع ملف
رسالة تشخيصية إذا تعذر تخصيص المكدس.
- مكدسة رئيسية يؤثر فقط على حجم المكدس لمؤشر البرنامج الأولي. لديها
لا يوجد تأثير على حجم أكوام الخيوط ، حيث أن Valgrind لا تخصصها.
قد تحتاج إلى استخدام كليهما - مكدسة رئيسية و - ماكس إطار مكدس معاً. إنها
من المهم أن نفهم ذلك - مكدسة رئيسية يحدد الحد الأقصى لحجم المكدس الإجمالي ،
في حين - ماكس إطار مكدس يحدد الحجم الأكبر لأي إطار مكدس واحد. سوف تفعلها
يجب أن يعمل بها - مكدسة رئيسية قيمة لنفسك (عادة ، إذا كان لديك
تطبيقات segfaults). لكن Valgrind سيخبرك بالحاجة - ماكس إطار مكدس حجم،
اذا كان ضروري.
كما نوقش بمزيد من التفصيل في وصف - ماكس إطار مكدس، مطلب كبير
المكدس هو علامة على مشاكل قابلية النقل المحتملة. من الأفضل أن تضع كل شيء
بيانات كبيرة في الذاكرة المخصصة للكومة.
- ماكس المواضيع = [إفتراضي: 500]
بشكل افتراضي ، يمكن أن يتعامل Valgrind مع ما يصل إلى 500 موضوع. في بعض الأحيان ، يكون هذا الرقم أيضًا
صغير. استخدم هذا الخيار لتوفير حد مختلف. على سبيل المثال - الحد الأقصى للخيوط = 3000.
MALLOC () - ذات الصلة OPTIONS
بالنسبة للأدوات التي تستخدم نسختها الخاصة من malloc (مثل Memcheck و Massif و Helgrind و DRD) ،
تنطبق الخيارات التالية.
- المحاذاة = [إفتراضي: 8 or 16 اعتمادا on القادم منصة]
افتراضيا Valgrind's malloc, إعادة تخصيص، وما إلى ذلك ، إرجاع كتلة عنوان البداية هو
محاذاة 8 بايت أو محاذاة 16 بايت (تعتمد القيمة على النظام الأساسي وتتطابق مع
النظام الأساسي الافتراضي). يتيح لك هذا الخيار تحديد محاذاة مختلفة. ال
يجب أن تكون القيمة المقدمة أكبر من أو تساوي القيمة الافتراضية ، أو أقل من أو تساوي
4096 ، ويجب أن يكون أسًا لاثنين.
- حجم المنطقة الحمراء = [إفتراضي: يعتمد on القادم أداة]
فالغريند مالوك realloc ، إلخ ، أضف كتل الحشو قبل وبعد كل كتلة كومة
المخصصة من قبل البرنامج الجاري تشغيله. تسمى كتل الحشو هذه بالمناطق الحمراء. ال
تعتمد القيمة الافتراضية لحجم المنطقة الحمراء على الأداة. على سبيل المثال ، يضيف Memcheck و
يحمي ما لا يقل عن 16 بايت قبل وبعد كل كتلة يخصصها العميل.
هذا يسمح له باكتشاف كتل السفلية أو التجاوزات التي تصل إلى 16 بايت.
زيادة حجم المنطقة الحمراء تجعل من الممكن اكتشاف التجاوزات لمسافات أكبر ،
ولكنه يزيد من حجم الذاكرة المستخدمة بواسطة Valgrind. تقليل حجم المنطقة الحمراء سوف
يقلل من الذاكرة التي يحتاجها Valgrind ولكنه يقلل أيضًا من فرص الكشف
overruns ، لذلك لا ينصح.
غير مألوف OPTIONS
تنطبق هذه الخيارات على جميع الأدوات ، لأنها تؤثر على بعض الأعمال الغامضة في Valgrind
جوهر. لن يحتاج معظم الناس إلى استخدامها.
- فحص smc = [إفتراضي: كل غير ملف لـ x86 / amd64 / s390x ،
كومة لـ أخرى أقواس]
يتحكم هذا الخيار في اكتشاف Valgrind للتعليمات البرمجية ذاتية التعديل. إذا لم يتم التحقق
تم ، عندما يقوم أحد البرامج بتنفيذ بعض التعليمات البرمجية ، ثم يقوم بالكتابة فوقها برمز جديد ، و
بتنفيذ الكود الجديد ، ستستمر Valgrind في تنفيذ الترجمات التي قدمتها
القانون القديم. سيؤدي هذا على الأرجح إلى سلوك غير صحيح و / أو أعطال.
بالنسبة إلى البنى "الحديثة" - أي شيء ليس x86 أو amd64 أو s390x - هو الافتراضي
is كومة. وذلك لأن البرنامج الصحيح يجب أن يتخذ إجراءً صريحًا لإعادة إنشائه
تماسك ذاكرة التخزين المؤقت DI بعد تعديل التعليمات البرمجية. فالغريند يلاحظ ويكرم مثل هذا
الإجراءات ، ونتيجة لذلك يتم التعامل مع التعليمات البرمجية ذاتية التعديل بشفافية بصفر
تكلفة إضافية.
بالنسبة إلى x86 و amd64 و s390x ، لا يلزم البرنامج بإخطار الأجهزة بـ
مطلوب تماسك DI. ومن ثم الافتراضي هو كل غير ملفالذي يغطي
الحالة العادية لإنشاء رمز في منطقة mmap'd مجهولة (غير مدعومة بالملفات).
معاني الإعدادات الأربعة المتاحة هي كما يلي. لا كشف (لا شيء),
الكشف عن التعليمات البرمجية ذاتية التعديل على المكدس (والتي يتم استخدامها من قبل GCC لتنفيذ التداخل
المهام) (كومة) ، اكتشف الشفرة ذاتية التعديل في كل مكان (الكل) والكشف
كود التعديل الذاتي في كل مكان باستثناء التعيينات المدعومة بالملفات (كل غير ملف).
الجري مع الكل سوف يبطئ Valgrind بشكل ملحوظ. الجري مع لا شيء نادرا
تسريع الأمور ، حيث يتم إنشاء القليل جدًا من التعليمات البرمجية ديناميكيًا في معظم البرامج.
ال VALGRIND_DISCARD_TRANSLATIONS طلب العميل هو بديل - فحص smc = الكل
و - smc-check = all-non-file يتطلب المزيد من جهود المبرمج ولكنه يسمح لـ Valgrind
لتشغيل برنامجك بشكل أسرع ، من خلال إخباره بدقة عندما تكون الترجمات ضرورية
مجدد.
- smc-check = all-non-file يوفر إصدارًا أرخص ولكنه محدود من
- فحص smc = الكل. يضيف تدقيقًا إلى أي ترجمات لا تنشأ من
تعيينات الذاكرة المدعومة بالملفات. التطبيقات النموذجية التي تنشئ رمزًا ، على سبيل المثال JITs
في متصفحات الويب ، قم بإنشاء رمز في مناطق مجهولة الهوية ، في حين أن الكود "الثابت"
من المستعرض دائمًا في التعيينات المدعومة بالملفات. - smc-check = all-non-file يأخذ
الاستفادة من هذه الملاحظة ، مما يحد من النفقات العامة للتدقيق على الكود الذي هو
من المحتمل أن يتم إنشاء JIT.
- قراءة مضمنة المعلومات = [إفتراضي: انظر تعريف أدناه]
عند التمكين ، ستقرأ Valgrind معلومات حول استدعاءات الوظائف المضمنة من DWARF3
معلومات التصحيح. يؤدي هذا إلى إبطاء بدء تشغيل Valgrind ويجعلها تستخدم المزيد من الذاكرة (عادةً لملفات
كل جزء من التعليمات البرمجية مضمنة ، 6 كلمات ومسافة لاسم الوظيفة) ، لكنها تنتج
في مزيد من التراص الوصفية. بالنسبة للإصدار 3.10.0 ، تم تمكين هذه الوظيفة
افتراضيًا فقط لأهداف Linux و Android و Solaris والأدوات فقط
Memcheck و Helgrind و DRD. فيما يلي مثال على بعض الأسطر المكدسة ذات الامتداد
- قراءة مضمنة معلومات = لا:
== 15380 == تعتمد القفزة أو الحركة المشروطة على قيمة (قيم) غير مهيأة
== 15380 == عند 0x80484EA: main (inlinfo.c: 6)
== 15380 ==
== 15380 == تعتمد القفزة أو الحركة المشروطة على قيمة (قيم) غير مهيأة
== 15380 == عند 0x8048550: fun_noninline (inlinfo.c: 6)
== 15380 == بواسطة 0x804850E: main (inlinfo.c: 34)
== 15380 ==
== 15380 == تعتمد القفزة أو الحركة المشروطة على قيمة (قيم) غير مهيأة
== 15380 == عند 0x8048520: رئيسي (inlinfo.c: 6)
وهنا نفس الأخطاء مع - قراءة مضمنة معلومات = نعم:
== 15377 == تعتمد القفزة أو الحركة المشروطة على قيمة (قيم) غير مهيأة
== 15377 == عند 0x80484EA: fun_d (inlinfo.c: 6)
== 15377 == بواسطة 0x80484EA: fun_c (inlinfo.c: 14)
== 15377 == بواسطة 0x80484EA: fun_b (inlinfo.c: 20)
== 15377 == بواسطة 0x80484EA: fun_a (inlinfo.c: 26)
== 15377 == بواسطة 0x80484EA: main (inlinfo.c: 33)
== 15377 ==
== 15377 == تعتمد القفزة أو الحركة المشروطة على قيمة (قيم) غير مهيأة
== 15377 == عند 0x8048550: fun_d (inlinfo.c: 6)
== 15377 == بواسطة 0x8048550: fun_noninline (inlinfo.c: 41)
== 15377 == بواسطة 0x804850E: main (inlinfo.c: 34)
== 15377 ==
== 15377 == تعتمد القفزة أو الحركة المشروطة على قيمة (قيم) غير مهيأة
== 15377 == عند 0x8048520: fun_d (inlinfo.c: 6)
== 15377 == بواسطة 0x8048520: main (inlinfo.c: 35)
- read-var-info = [إفتراضي: لا]
عند التمكين ، سوف تقرأ Valgrind معلومات حول أنواع المتغيرات والمواقع من
معلومات تصحيح DWARF3. يؤدي هذا إلى إبطاء بدء تشغيل Valgrind بشكل كبير ويجعله يستخدم
ذاكرة أكبر بشكل ملحوظ ، ولكن للأدوات التي يمكنها الاستفادة منها (Memcheck ،
Helgrind ، DRD) يمكن أن يؤدي إلى رسائل خطأ أكثر دقة. على سبيل المثال ، هنا
بعض الأخطاء المعيارية الصادرة عن Memcheck:
== 15363 == تم العثور على بايت (وحدات) غير مهيأة أثناء طلب فحص العميل
== 15363 == عند 0x80484A9: croak (varinfo1.c: 28)
== 15363 == بواسطة 0x8048544: رئيسي (varinfo1.c: 55)
== 15363 == العنوان 0x80497f7 هو 7 بايت داخل رمز البيانات "global_i2"
== 15363 ==
== 15363 == تم العثور على بايت (وحدات) غير مهيأة أثناء طلب فحص العميل
== 15363 == عند 0x80484A9: croak (varinfo1.c: 28)
== 15363 == بواسطة 0x8048550: رئيسي (varinfo1.c: 56)
== 15363 == العنوان 0xbea0d0cc موجود في مكدس مؤشر الترابط 1
== 15363 == في الإطار رقم 1 ، تم إنشاؤه بواسطة main (varinfo1.c: 45)
وهنا نفس الأخطاء مع - read-var-info = نعم:
== 15370 == تم العثور على بايت (وحدات) غير مهيأة أثناء طلب فحص العميل
== 15370 == عند 0x80484A9: croak (varinfo1.c: 28)
== 15370 == بواسطة 0x8048544: رئيسي (varinfo1.c: 55)
== 15370 == الموقع 0x80497f7 يساوي 0 بايت داخل global_i2 [7] ،
== 15370 == متغير عام مُعلن في varinfo1.c: 41
== 15370 ==
== 15370 == تم العثور على بايت (وحدات) غير مهيأة أثناء طلب فحص العميل
== 15370 == عند 0x80484A9: croak (varinfo1.c: 28)
== 15370 == بواسطة 0x8048550: رئيسي (varinfo1.c: 56)
== 15370 == الموقع 0xbeb4a0cc يساوي 0 بايت داخل var المحلي "local"
== 15370 == تم الإعلان عنه في varinfo1.c: 46 ، في الإطار رقم 1 من الخيط 1
--vgdb- استطلاع = [إفتراضي: 5000]
كجزء من الحلقة الرئيسية ، سيقوم برنامج جدولة Valgrind بالاستقصاء للتحقق مما إذا كان هناك نشاط ما
(مثل أمر خارجي أو بعض المدخلات من gdb) يجب معالجته بواسطة gdbserver.
سيتم إجراء استطلاع النشاط هذا بعد تشغيل العدد المحدد من الكتل الأساسية (أو
أكثر بقليل من عدد الكتل الأساسية المعطى). هذا الاستطلاع رخيص جدًا لذا فإن
تم تعيين القيمة الافتراضية منخفضة نسبيًا. يمكنك تقليل هذه القيمة بشكل أكبر إذا كان vgdb
لا يمكن استخدام استدعاء نظام ptrace لمقاطعة Valgrind إذا كانت كافة مؤشرات الترابط (معظم ملفات
time) محظورًا في مكالمة نظام.
--vgdb-shadow-registers = لا | نعم [إفتراضي: لا]
عند التنشيط ، سيعرض gdbserver سجلات الظل Valgrind إلى GDB. مع هذا،
يمكن فحص قيمة سجلات الظل Valgrind أو تغييرها باستخدام GDB.
يعمل الكشف عن سجلات الظل فقط مع الإصدار 7.1 من GDB أو إصدار أحدث.
--vgdb- بادئة = [إفتراضي: / tmp / vgdb-pipe]
للتواصل مع gdb / vgdb ، يُنشئ Valgrind gdbserver 3 ملفات (اثنان باسم FIFOs
وملف ذاكرة مشتركة mmap). يتحكم خيار البادئة في الدليل والبادئة
لإنشاء هذه الملفات.
--run-libc-freeres = [إفتراضي: نعم]
هذا الخيار مناسب فقط عند تشغيل Valgrind على Linux.
مكتبة جنو سي (libc.so) ، الذي تستخدمه جميع البرامج ، قد تخصص ذاكرة لـ
استخداماته الخاصة. عادةً لا يكلف نفسه عناء تحرير تلك الذاكرة عند انتهاء البرنامج—
لن تكون هناك فائدة ، لأن نواة Linux تستعيد جميع موارد العملية عندما يكون ملف
عملية الخروج على أي حال ، لذلك سيؤدي فقط إلى إبطاء الأمور.
أدرك مؤلفو glibc أن هذا السلوك يتسبب في وجود مدققات تسرب ، مثل Valgrind ،
للإبلاغ كذباً عن تسريبات في glibc ، عند إجراء فحص للتسرب عند الخروج. من أجل تجنب
هذا ، قدموا روتينًا يسمى __الحرية_الشهرية على وجه التحديد لجعل الإصدار glibc
كل الذاكرة التي خصصتها. ولذلك يحاول Memcheck الركض __الحرية_الشهرية عند الخروج.
للأسف ، في بعض الإصدارات القديمة جدًا من glibc ، __الحرية_الشهرية بما فيه الكفاية
عربات التي تجرها الدواب لإحداث أخطاء التجزئة. كان هذا ملحوظًا بشكل خاص على Red Hat 7.1.
لذلك يتم توفير هذا الخيار لمنع تشغيل __الحرية_الشهرية. إذا كان لديك
يبدو أن البرنامج يعمل بشكل جيد على Valgrind ، ولكن segfaults عند الخروج ، قد تجد ذلك
--run-libc-freeres = لا يصلح ذلك ، على الرغم من أن ذلك يكون على حساب الإبلاغ الكاذب المحتمل
تسرب الفضاء في libc.so.
- تلميحات سيم = تلميح 1 ، تلميح 2 ، ...
قم بتمرير تلميحات متنوعة إلى Valgrind والتي تعدل بشكل طفيف سلوك المحاكاة في
بطرق غير قياسية أو خطيرة ، ربما للمساعدة في محاكاة ميزات غريبة. بواسطة
الافتراضي لا تلميحات مفعلة. استخدم بحذر! التلميحات المعروفة حاليًا هي:
· التراخي ioctls: كن متساهلاً للغاية بشأن التعامل مع ioctl ؛ الافتراض الوحيد هو أن الحجم
صحيح. لا يتطلب تهيئة المخزن المؤقت الكامل عند الكتابة.
بدون هذا ، باستخدام بعض برامج تشغيل الأجهزة مع عدد كبير من ioctl غريب
تصبح الأوامر متعبة للغاية.
· متوافق مع الصمامات: قم بتمكين معالجة خاصة لبعض مكالمات النظام التي قد يتم حظرها
في نظام ملفات FUSE. قد يكون هذا ضروريًا عند تشغيل Valgrind على ملف
برنامج متعدد الخيوط يستخدم مؤشر ترابط واحد لإدارة نظام ملفات FUSE و
موضوع آخر للوصول إلى نظام الملفات هذا.
· تمكين الخارجي: قم بتمكين بعض السحر الخاص المطلوب عند تشغيل البرنامج
نفسها فالجريند.
· لا-داخلي-بادئة: تعطيل طباعة بادئة > أمام كل stdout أو stderr
يتم تشغيل خط الإخراج في Valgrind الداخلية بواسطة Valgrind خارجي. وهذا مفيد
عند إجراء اختبارات انحدار Valgrind في إعداد خارجي / داخلي. نلاحظ أن
بادئة > ستتم طباعته دائمًا أمام أسطر تسجيل التصحيح الداخلية.
· لا-nptl-pthread-stackcache: هذا التلميح مناسب فقط عند تشغيل Valgrind
لينكس.
مكتبة GNU glibc pthread (libpthread.so) ، والذي تستخدمه برامج pthread ،
يحتفظ بذاكرة تخزين مؤقت لأكوام pthread. عندما ينتهي pthread ، يتم استخدام الذاكرة
لمكدس pthread وبعض بنية البيانات ذات الصلة بالتخزين المحلي ليست كذلك
دائما بشكل مباشر. يتم الاحتفاظ بهذه الذاكرة في ذاكرة التخزين المؤقت (حتى حجم معين) ،
ويتم إعادة استخدامه إذا بدأ موضوع جديد.
تؤدي ذاكرة التخزين المؤقت هذه إلى قيام أداة helgrind بالإبلاغ عن بعض حالات السباق الإيجابية الخاطئة
أخطاء في هذه الذاكرة المخبأة ، لأن helgrind لا يفهم glibc الداخلية
أساسيات مزامنة ذاكرة التخزين المؤقت. لذلك ، عند استخدام helgrind ، تعطيل ذاكرة التخزين المؤقت
يساعد على تجنب ظروف السباق الإيجابية الخاطئة ، خاصة عند استخدام الخيط
متغيرات التخزين المحلية (مثل المتغيرات التي تستخدم الامتداد __خيط مؤهل).
عند استخدام أداة memcheck ، فإن تعطيل ذاكرة التخزين المؤقت يضمن الذاكرة المستخدمة بواسطة glibc
للتعامل مع المتغيرات __thread مباشرة عند إنهاء مؤشر ترابط.
ملاحظة: يقوم Valgrind بتعطيل ذاكرة التخزين المؤقت باستخدام بعض المعرفة الداخلية بمكدس glibc
تنفيذ ذاكرة التخزين المؤقت وبفحص معلومات تصحيح أخطاء pthread
مكتبة. وبالتالي فإن هذه التقنية هشة إلى حد ما وقد لا تعمل مع جميع الجليبك
الإصدارات. تم اختبار هذا بنجاح مع إصدارات مختلفة من glibc (على سبيل المثال
2.11 ، 2.16 ، 2.18) على منصات مختلفة.
· أبواب تراخي: (سولاريس فقط) كن متساهلاً للغاية بشأن التعامل مع نظام فتح الباب
واصفات ملفات الباب غير المعروفة. لا يتطلب ذلك المخزن المؤقت الكامل
تهيئته عند الكتابة. بدون هذا ، تستخدم البرامج libdoorوظيفة (3LIB)
مع دلالات مملوكة بالكامل قد تشير إلى عدد كبير من الإيجابيات الخاطئة.
--الجدولة العادلة = [إفتراضي: لا]
ال --تقويم عادل يتحكم الخيار في آلية القفل المستخدمة بواسطة Valgrind للتسلسل
تنفيذ الموضوع. تتحكم آلية القفل في طريقة جدولة الخيوط ،
والإعدادات المختلفة تعطي مقايضات مختلفة بين الإنصاف والأداء. ل
مزيد من التفاصيل حول مخطط تسلسل مؤشرات الترابط Valgrind وتأثيره على
الأداء وجدولة مؤشرات الترابط ، راجع الجدولة والأداء متعدد مؤشرات الترابط.
· القيمة --الجدولة العادلة = نعم ينشط جدولة عادل. باختصار ، إذا كانت متعددة
الخيوط جاهزة للتشغيل ، سيتم جدولة الخيوط بطريقة روبن مستديرة.
هذه الآلية غير متوفرة على جميع الأنظمة الأساسية أو إصدارات Linux. ان لم
متاح ، باستخدام --الجدولة العادلة = نعم سيؤدي إلى إنهاء Valgrind بخطأ.
قد تجد أن هذا الإعداد يحسن الاستجابة العامة إذا كنت تقوم بتشغيل ملف
برنامج تفاعلي متعدد مؤشرات الترابط ، على سبيل المثال متصفح الويب ، على Valgrind.
· القيمة --الجدولة العادلة = حاول ينشط الجدولة العادلة إذا كانت متوفرة على المنصة.
خلاف ذلك ، سوف يعود تلقائيًا إلى --الجدولة العادلة = لا.
· القيمة --الجدولة العادلة = لا ينشط المجدول الذي لا يضمن الإنصاف
بين الخيوط الجاهزة للتشغيل ، ولكنها بشكل عام تعطي أعلى أداء.
- kernel-variant = variant1 ، variant2 ، ...
تعامل مع استدعاءات النظام و ioctls الناشئة عن المتغيرات الثانوية للنواة الافتراضية لـ
هذه المنصة. هذا مفيد للتشغيل على النواة المخترقة أو مع وحدات kernel النمطية
التي تدعم ioctls غير القياسي ، على سبيل المثال. استخدم بحذر. إذا لم تفعل
فهم ما يفعله هذا الخيار ، فمن المؤكد أنك لست بحاجة إليه. حالياً
المتغيرات المعروفة هي:
· com.bproc: دعم sys_broc استدعاء النظام على x86. هذا للتشغيل على BProc ،
وهو متغير ثانوي من نظام Linux القياسي والذي يستخدم أحيانًا للبناء
عناقيد المجموعات.
· android-no-hw-tls: بعض إصدارات محاكي Android لـ ARM لا توفر ملف
الأجهزة TLS (حالة مؤشر الترابط المحلي) ، وتعطل Valgrind عند بدء التشغيل. يستخدم
هذا البديل لتحديد دعم البرنامج لـ TLS.
· الروبوت-GPU-sgx5xx: استخدم هذا لدعم التعامل مع ioctls الخاصة بـ
سلسلة PowerVR SGX 5XX لوحدات معالجة الرسومات على أجهزة Android. عدم تحديد هذا لا
يسبب مشاكل في الاستقرار ، ولكنه قد يتسبب في قيام Memcheck بالإبلاغ عن أخطاء خاطئة بعد
ينفذ البرنامج ioctls الخاصة بوحدة معالجة الرسومات.
· android-gpu-adreno3xx: بالمثل ، استخدم هذا لدعم التعامل مع الملكية
ioctls لسلسلة Qualcomm Adreno 3XX لوحدات معالجة الرسومات على أجهزة Android.
- إطارات دمج متكررة = [إفتراضي: 0]
يتم إنشاء بعض الخوارزميات العودية ، على سبيل المثال تطبيقات الشجرة الثنائية المتوازنة
العديد من تتبعات المكدس المختلفة ، كل منها يحتوي على دورات من المكالمات. يتم تعريف الدورة على أنها
قيمتان متطابقتان لعداد البرامج مفصولة بصفر أو أكثر من عداد برنامج آخر
قيم. قد يستخدم Valgrind بعد ذلك الكثير من الذاكرة لتخزين كل آثار المكدس هذه. هذا هو
استخدام ضعيف للذاكرة مع الأخذ في الاعتبار أن مثل هذه الآثار المكدسة تحتوي على رتيبة متكررة
المكالمات المتكررة بدلاً من المعلومات الأكثر إثارة للاهتمام مثل الوظيفة التي تحتوي على
بدأ المكالمة المتكررة.
الخيار - إطارات دمج متكررة = يوجه Valgrind للكشف والدمج
دورات المكالمات المتكررة بحجم يصل إلى الإطارات. عندما تكون هذه الدورة
تم اكتشافه ، يسجل Valgrind الدورة في تتبع المكدس باعتباره عداد برنامج فريد.
القيمة 0 (الافتراضية) لا تؤدي إلى دمج استدعاء متكرر. قيمة 1 سوف تسبب
كومة آثار الخوارزميات العودية البسيطة (على سبيل المثال ، تنفيذ عاملي)
ليتم انهيارها. عادةً ما تكون القيمة 2 مطلوبة لطي آثار المكدس الناتجة
من خلال الخوارزميات العودية مثل الأشجار الثنائية ، والفرز السريع ، وما إلى ذلك. قد تكون القيم الأعلى
مطلوب للخوارزميات العودية الأكثر تعقيدًا.
ملاحظة: يتم الكشف عن المكالمات المتكررة عن طريق تحليل قيم عداد البرنامج. هم ليسوا
تم الكشف عنها من خلال النظر في أسماء الوظائف.
- عدد - ترانستاب - القطاعات = [إفتراضي: 6 لـ أندرويد المنصات، 16 لـ الكل آحرون]
يقوم Valgrind بترجمة وتشغيل رمز آلة البرنامج الخاص بك في أجزاء صغيرة
(الكتل الأساسية). يتم تخزين الترجمات في ذاكرة تخزين مؤقت للترجمة مقسمة
في عدد من الأقسام (القطاعات). إذا كانت ذاكرة التخزين المؤقت ممتلئة ، فإن القطاع الذي يحتوي على ملف
يتم إفراغ أقدم الترجمات وإعادة استخدامها. إذا كانت هناك حاجة إلى هذه الترجمات القديمة مرة أخرى ،
يجب على Valgrind إعادة ترجمة وإعادة صياغة رمز الجهاز المقابل ، وهو
غالي. إذا كانت "التعليمات المنفذة" مجموعة عمل البرنامج كبيرة ، فيزداد
قد يؤدي عدد القطاعات إلى تحسين الأداء عن طريق تقليل عدد
يلزم إعادة الترجمات. يتم تخصيص القطاعات حسب الطلب. بمجرد تخصيصها ، يمكن للقطاع
لا يتم تحريرها أبدًا ، وتحتل مساحة كبيرة ، اعتمادًا على الأداة والقيمة
of - avg-transtab-entry-size (حوالي 40 ميغا بايت لكل قطاع لـ Memcheck). استخدم الخيار
--stats = نعم للحصول على معلومات دقيقة حول الذاكرة المستخدمة من قبل قطاع و
تخصيص وإعادة تدوير القطاعات.
--avg-transtab-entry-size = [إفتراضي: 0, معنى تستخدم أداة المقدمة إفتراضي]
متوسط حجم الكتلة الأساسية المترجمة. يتم استخدام هذا الحجم المتوسط لأبعاد
حجم القطاع. توفر كل أداة قيمة افتراضية لاستخدامها. إذا كانت هذه القيمة الافتراضية
صغيرة جدًا ، ستمتلئ قطاعات الترجمة بسرعة كبيرة جدًا. إذا كان هذا الافتراضي
القيمة كبيرة جدًا ، ولن يتم استخدام جزء كبير من ذاكرة قطاع الترجمة.
لاحظ أن متوسط حجم ترجمة الكتلة الأساسية يعتمد على الأداة والقوة
تعتمد على خيارات الأداة. على سبيل المثال ، خيار memcheck - أصول المسار = نعم الزيادات
حجم ترجمات الكتلة الأساسية. يستخدم - avg-transtab-entry-size لضبط
حجم القطاعات ، إما للحصول على ذاكرة أو لتجنب الكثير من عمليات إعادة الترجمات.
--aspace-minaddr = [إفتراضي: يعتمد on القادم منصة]
لتجنب التعارضات المحتملة مع بعض مكتبات النظام ، لا تستخدم Valgrind امتداد
مساحة العنوان أدناه --aspace-minaddr القيمة ، مع الاحتفاظ بها محجوزة في حالة وجود مكتبة
يطلب على وجه التحديد الذاكرة في هذه المنطقة. لذلك ، يتم تخمين بعض القيم "المتشائمة"
بواسطة Valgrind حسب المنصة. في نظام التشغيل Linux ، بشكل افتراضي ، يتجنب Valgrind استخدام امتداد
أول 64 ميغا بايت حتى لو لم يكن هناك تعارض في هذه المنطقة الكاملة. يمكنك استخدام
الخيار --aspace-minaddr للاستفادة من تطبيق جائع ذاكرتك
المزيد من هذه الذاكرة المنخفضة. من ناحية أخرى ، إذا واجهت صراعًا ، فيزداد
قد تحلها قيمة aspace-minaddr. عادة ما تظهر الصراعات نفسها مع
فشل mmap في النطاق المنخفض لمساحة العنوان. يجب أن يكون العنوان المقدم صفحة
محاذاة ويجب أن تكون مساوية أو أكبر لـ 0x1000 (4KB). للعثور على القيمة الافتراضية في ملف
المنصة ، افعل شيئًا مثل valgrind -d -d date 2> & 1 | grep -i minaddr. قيم
من المعروف أن أقل من 0x10000 (64 كيلو بايت) تسبب مشاكل في بعض التوزيعات.
--valgrind-stacksize = [إفتراضي: 1 ميغا بايت]
لكل خيط ، يحتاج Valgrind إلى مكدس "خاص" خاص به. الحجم الافتراضي لهؤلاء
المداخن ذات أبعاد كبيرة ، وبالتالي يجب أن تكون كافية في معظم الحالات. في حالة وجود ملف
الحجم صغير جدًا ، فإن Valgrind سوف يخطئ. قبل segfaulting ، قد يكون هناك تحذير
التي تنتجها Valgrind عند الاقتراب من الحد الأقصى.
استخدم الخيار --valgrind-stacksize إذا تم إصدار مثل هذا التحذير (غير المحتمل) ، أو
يموت Valgrind بسبب انتهاك التجزئة. كانت هذه الانتهاكات تجزئة
شوهد عند فك رموز C ++ الضخمة.
إذا كان التطبيق الخاص بك يستخدم العديد من الخيوط ويحتاج إلى الكثير من الذاكرة ، يمكنك الحصول على بعض
الذاكرة عن طريق تقليل حجم مكدسات Valgrind هذه باستخدام الخيار
--valgrind-stacksize.
- إظهار-emwarns = [إفتراضي: لا]
عند التمكين ، ستصدر Valgrind تحذيرات حول محاكاة وحدة المعالجة المركزية الخاصة بها في حالات معينة.
هذه عادة ليست مثيرة للاهتمام.
--require-text-symbol =: sonamepatt: fnnamepatt
عندما كائن مشترك يتطابق ابنه سوناميبات يتم تحميله في العملية ،
افحص جميع رموز النص التي يصدرها. إذا لم يتطابق أي من هؤلاء فننامبات، اطبع ملف
رسالة الخطأ والتخلي عن المدى. هذا يجعل من الممكن التأكد من أن الجري يفعل
لا تستمر إلا إذا كان كائن مشترك يحتوي على اسم وظيفة معينة.
يبلغ قطر كلاً من سوناميبات و فننامبات يمكن كتابتها باستخدام المعتاد ? و * البدل. ل
مثال: ": * libc.so *: foo؟ bar". يمكنك استخدام أحرف غير النقطتين للفصل
النمطين. من المهم فقط أن يكون الحرف الأول والفاصل
الشخصية هي نفسها. على سبيل المثال ، يمكن أيضًا كتابة المثال أعلاه
"Q * libc.so * Qfoo؟ bar". مضاعف
--طلب-نص-رمز يُسمح باستخدام الإشارات ، وفي هذه الحالة يتم تحميل الكائنات المشتركة
في العملية سيتم فحصها مقابل كل منهم.
والغرض من ذلك هو دعم الاستخدام الموثوق به للمكتبات التي تم ترميزها. على سبيل المثال،
لنفترض أن لدينا نسخة من دول مجلس التعاون الخليجي libgomp.so التي تم ترميزها بـ
التعليقات التوضيحية لدعم Helgrind. من السهل جدًا والمربك تحميل الخطأ ،
غير مشروح libgomp.so في التطبيق. لذا فإن الفكرة هي: إضافة رمز نص في ملف
مكتبة مرمزة ، على سبيل المثال annotated_for_helgrind_3_6، ومن ثم إعطاء العلم
--require-text-code =: * libgomp * so *: annotated_for_helgrind_3_6 لذلك متى libgomp.so
تم تحميله ، يقوم Valgrind بمسح جدول الرموز الخاص به ، وإذا لم يكن الرمز موجودًا ، فسيتم تشغيله
تم إجهاضها ، بدلاً من الاستمرار بصمت مع المكتبة التي لم يتم ترميزها. لاحظ أنك
يجب وضع العلم بالكامل بين علامتي اقتباس لإيقاف توسيع القذائف لأعلى * و ?
البدل.
- مرادفات اسم المترادفات = syn1 = pattern1، syn2 = pattern2، ...
عندما يتم تحميل مكتبة مشتركة ، يقوم Valgrind بالتحقق من الوظائف الموجودة في المكتبة التي
يجب استبداله أو لفه. على سبيل المثال ، يستبدل Memcheck جميع ملفات malloc ذات الصلة
وظائف (malloc ، free ، calloc ، ...) بإصداراتها الخاصة. هذه البدائل
يتم إجراؤه افتراضيًا فقط في المكتبات المشتركة التي يتطابق اسمها مع soname محدد مسبقًا
نمط (على سبيل المثال libc.so * على لينكس). بشكل افتراضي ، لا يتم إجراء أي استبدال لملف
مكتبة مرتبطة أو لمكتبات بديلة مثل tcmalloc. في بعض الحالات ، يكون ملف
بدائل تسمح - مرادفات نفس الاسم لتحديد نمط مرادف إضافي ، العطاء
المرونة في الاستبدال.
حاليًا ، لا يُسمح بهذه المرونة إلا للوظائف ذات الصلة بـ malloc ، باستخدام
المرادف سومالوك. هذا المرادف قابل للاستخدام لجميع الأدوات التي تقوم بالاستبدال القياسي
من الوظائف ذات الصلة بـ malloc (مثل memcheck و massif و drd و helgrind و exp-dhat و
إكسب-سجشيك).
· مكتبة malloc البديلة: لتحل محل الوظائف ذات الصلة malloc في بديل
مكتبة مع سونام mymalloclib.so، امنح الخيار
- مرادفات اسمها = سومالوك = mymalloclib.so. يمكن استخدام نمط لمطابقة عدة
اسماء المكتبات. على سبيل المثال، - مرادفات اسمها = سومالوك = * tcmalloc * سيطابق
اسم Soname لجميع المتغيرات الخاصة بمكتبة tcmalloc (أصلية ، تصحيح الأخطاء ، ملف تعريف ، ...
المتغيرات tcmalloc).
ملاحظة: يمكن استرجاع اسم Soname للمكتبة المشتركة elf باستخدام readelf
خدمة.
· الاستبدالات في مكتبة مرتبطة بشكل ثابت تتم باستخدام لا شيء .
على سبيل المثال ، إذا قمت بالارتباط بـ libtcmalloc.a، ستعمل memcheck بشكل صحيح عندما تقوم بذلك
إعطاء الخيار - مرادفات اسمها = سومالوك = لا شيء. لاحظ أن نمط NONE سيفعل ذلك
تطابق الملف التنفيذي الرئيسي وأي مكتبة مشتركة ليس لها سونام.
لتشغيل "افتراضي" فايرفوكس بناء لينكس ، والذي يرتبط فيه JEMalloc في
الرئيسي القابل للتنفيذ ، الاستخدام - مرادفات اسمها = سومالوك = لا شيء.
تفكيك فالغريند OPTIONS
هناك أيضًا بعض الخيارات لتصحيح أخطاء Valgrind نفسها. لا يجب عليك استخدامها
في المسار الطبيعي للأشياء. إذا كنت ترغب في رؤية القائمة ، فاستخدم --مساعدة التصحيح الخيار.
ممشك OPTIONS
- فحص التسرب = [إفتراضي: ملخص]
عند التمكين ، ابحث عن تسرب الذاكرة عند انتهاء برنامج العميل. إذا تم التعيين على
ملخصيوضح عدد التسريبات التي حدثت. إذا تم التعيين على بالإضافة إلى or نعم ، كل تسرب فردي
سيظهر بالتفصيل و / أو يحسب على أنه خطأ ، على النحو المحدد في الخيارات
- إظهار التسرب أنواع و - أنواع الأخطاء مقابل التسريب.
- دقة التسرب = [إفتراضي: عالي]
عند القيام بفحص التسرب ، يحدد مدى استعداد Memcheck لاختلافه
أن تكون backtraces هي نفسها لأغراض دمج العديد من التسريبات في واحد
تقرير التسريب. عند الضبط على منخفض، يلزم تطابق المدخلات الأولى والثانية فقط. متى معأربعة
يجب أن تتطابق الإدخالات. متى عالي، يجب أن تتطابق جميع الإدخالات.
من أجل تصحيح أخطاء التسرب الشديد ، ربما تريد استخدامه - دقة التسريب = عالية سويا
مع - عدد المتصلين = 40 أو بعض هذا العدد الكبير.
نلاحظ أن - دقة التسريب لا يؤثر الإعداد على قدرة Memcheck في العثور على ملفات
التسريبات. إنه يغير فقط كيفية عرض النتائج.
- إظهار-أنواع التسرب = [إفتراضي: محدد ، ممكن]
يحدد أنواع التسرب التي سيتم عرضها في ملف بالإضافة إلى البحث عن التسريب بإحدى الطرق التالية:
· قائمة مفصولة بفواصل من واحد أو أكثر من واضح غير مباشر ممكن قابل للوصول.
· الكل لتحديد المجموعة الكاملة (جميع أنواع التسرب). إنه يعادل
- إظهار-أنواع التسرب = محدد ، غير مباشر ، ممكن ، يمكن الوصول إليه.
· لا شيء للمجموعة الفارغة.
- أنواع الأخطاء مقابل التسريب = [إفتراضي: محدد ، ممكن]
يحدد أنواع التسرب ليتم احتسابها كأخطاء في ملف بالإضافة إلى بحث التسريب. ال is
المحدد بالمثل - إظهار التسرب أنواع
- الاستدلال بفحص التسرب = [إفتراضي: الجميع]
يحدد مجموعة أساليب فحص التسرب لاستخدامها أثناء عمليات البحث عن التسرب. ال
تتحكم الاستدلالات في المؤشرات الداخلية للكتلة التي تؤدي إلى اعتبارها على أنها
يمكن الوصول إليه. يتم تحديد مجموعة الكشف عن مجريات الأمور بإحدى الطرق التالية:
· قائمة مفصولة بفواصل من واحد أو أكثر من com.stdstring الطول 64 نيوأري
تعدد الميراث.
· الكل لتنشيط مجموعة الاستدلال الكاملة. إنه يعادل
- الاستدلال بفحص التسرب = stdstring ، length64 ، newarray ، متعدد الميراث.
· لا شيء للمجموعة الفارغة.
لاحظ أن هذه الأساليب البحثية تعتمد على تخطيط الكائنات التي ينتجها
مترجم C ++. تم اختبارها مع بعض إصدارات دول مجلس التعاون الخليجي (مثل 4.4 و 4.7). هم
قد لا تعمل بشكل صحيح مع برامج التحويل البرمجي لـ C ++ الأخرى.
- إظهار - يمكن الوصول إليه = , - إظهار-ربما فقدت =
توفر هذه الخيارات طريقة بديلة لتحديد أنواع التسرب لإظهارها:
· - عرض يمكن الوصول إليه = لا - إظهار-ربما فقدت = نعم ما يعادل
- إظهار-أنواع التسريب = محدد ، ممكن.
· - عرض يمكن الوصول إليه = لا - إظهار-من المحتمل أن تكون مفقودة = لا ما يعادل
- إظهار-أنواع التسرب = محدد.
· - إظهار - يمكن الوصول إليه = نعم ما يعادل - إظهار-أنواع التسريب = الكل.
نلاحظ أن - إظهار-من المحتمل أن تكون مفقودة = لا ليس له تأثير إذا - إظهار - يمكن الوصول إليه = نعم محدد.
- أخطاء قيمة الصندوق = [إفتراضي: نعم]
يتحكم في ما إذا كانت تقارير Memcheck تستخدم أخطاء قيمة غير محددة. اضبط هذا على لا if
لا تريد أن ترى أخطاء قيمة غير محددة. كما أن لها آثارًا جانبية تتمثل في زيادة السرعة
يصل Memcheck إلى حد ما.
- أصول المسار = [إفتراضي: لا]
يتحكم في ما إذا كان Memcheck يتتبع أصل القيم غير المهيأة. افتراضيا ، هو
لا ، مما يعني أنه على الرغم من أنه يمكن أن يخبرك أن القيمة غير المهيأة هي
عند استخدامه بطريقة خطيرة ، لا يمكنه إخبارك من أين جاءت القيمة غير المهيأة
من. هذا غالبًا ما يجعل من الصعب تعقب المشكلة الجذرية.
عند الضبط على نعم ، تقوم Memcheck بتتبع أصول جميع القيم غير المهيأة.
بعد ذلك ، عند الإبلاغ عن خطأ قيمة غير مهيأ ، سيحاول Memcheck إظهار ملف
أصل القيمة. يمكن أن يكون الأصل أحد الأماكن الأربعة التالية: كتلة كومة ،
تخصيص مكدس أو طلب عميل أو مصادر أخرى متنوعة (على سبيل المثال ، استدعاء لـ
BRK).
للقيم غير المهيأة الناشئة من كتلة كومة ، يعرض Memcheck مكان الكتلة
تم تخصيصه. للقيم غير المهيأة الناشئة من تخصيص مكدس ، Memcheck
يمكن أن يخبرك بالدالة المخصصة للقيمة ، ولكن ليس أكثر من ذلك - عادةً
يُظهر لك موقع مصدر الدعامة الافتتاحية للوظيفة. لذلك يجب عليك
تحقق بعناية من تهيئة جميع المتغيرات المحلية للوظيفة بشكل صحيح.
عبء الأداء: تتبع الأصل مكلف. يخفض سرعة Memcheck و
يزيد من استخدام الذاكرة بحد أدنى 100 ميغا بايت ، وربما أكثر. ومع ذلك يمكن
تقليل الجهد المطلوب بشكل كبير لتحديد السبب الجذري لعدم التهيئة
قيمة الأخطاء ، وغالبًا ما يكون ذلك بمثابة فوز في إنتاجية المبرمج ، على الرغم من تشغيل المزيد
ببطء.
الدقة: تتبع Memcheck الأصول بدقة تامة. لتجنب مساحة كبيرة جدا والوقت
النفقات العامة ، يتم إجراء بعض التقديرات. من الممكن ، على الرغم من أنه من غير المحتمل ، ذلك
سيبلغ Memcheck عن أصل غير صحيح ، أو لن يكون قادرًا على تحديد أي أصل.
لاحظ أن الجمع - أصول المسار = نعم و - أخطاء قيمة الصندوق = لا is
لا معنى له. يتحقق Memcheck من هذه المجموعة ويرفضها عند بدء التشغيل.
- أحمال جزئية - موافق = [إفتراضي: نعم]
يتحكم في كيفية معالجة Memcheck للأحمال 32 و 64 و 128 و 256 بت المحاذاة بشكل طبيعي من
العناوين التي يمكن عنونة بعض البايت لها والبعض الآخر لا. متى نعم ، هذا
الأحمال لا تنتج خطأ في العنوان. بدلاً من ذلك ، يتم تحميل وحدات البايت الناشئة من غير قانوني
يتم وضع علامة على العناوين على أنها غير مهيأة ، والعناوين المقابلة للعناوين القانونية هي
يتم التعامل معها بالطريقة العادية.
متى لا، يتم التعامل مع الأحمال من العناوين غير الصالحة جزئيًا مثل التحميلات من
عناوين غير صالحة تمامًا: تم إصدار خطأ عنوان غير قانوني ، والنتيجة
يتم وضع علامة بايت على أنها مهيأة.
لاحظ أن الكود الذي يتصرف بهذه الطريقة ينتهك معايير ISO C / C ++ ،
ويجب اعتباره مكسورًا. إذا كان ذلك ممكنًا ، فيجب إصلاح هذا الرمز.
- فحوصات التعريف الرخيصة = [إفتراضي: لا]
يتحكم في ما إذا كان يجب أن تستخدم Memcheck بشكل أكثر دقة ولكن أيضًا أكثر تكلفة (الوقت
تستهلك) الخوارزميات عند التحقق من تعريف القيمة. الإعداد الافتراضي هو
لا تفعل ذلك وعادة ما يكون كافيا. ومع ذلك ، للحصول على رمز الأمثل للغاية
قد يشكو valgrind في بعض الأحيان بشكل غير صحيح. استدعاء valgrind مع
- فحوصات التعريف الرخيصة = نعم يساعد ولكن يأتي بتكلفة الأداء. مدة العرض
لوحظ تدهور بنسبة 25 ٪ ولكن التكلفة الإضافية تعتمد إلى حد كبير على
التطبيق في متناول اليد.
- keep-stacktraces = تخصيص | مجاني | تخصيص وخالي | تخصيص ثم مجاني | بلا [إفتراضي:
تخصيص وخالي]
عناصر التحكم التي يتم الاحتفاظ بالتتبع (الآثار) المكدسة للاحتفاظ بها للكتل malloc'd و / أو free'd.
بدافع تخصيص ثم خالية، يتم تسجيل تتبع المكدس في وقت التخصيص ، ويكون مرتبطًا
مع الكتلة. عندما يتم تحرير الكتلة ، يتم تسجيل تتبع مكدس ثاني ، وهذا
يستبدل تتبع مكدس التخصيص. ونتيجة لذلك ، فإن أي أخطاء تتعلق بـ "الاستخدام بعد المجاني"
إلى هذه الكتلة يمكن فقط إظهار تتبع مكدس حيث تم تحرير الكتلة.
بدافع تخصيص وخالية، كل من تتبع مكدس التخصيص وإلغاء التخصيص للكتلة
يتم تخزينها. ومن ثم سيظهر خطأ "الاستخدام بعد المجاني" كلاهما ، مما قد يؤدي إلى حدوث الخطأ
أسهل في التشخيص. مقارنة ب تخصيص ثم خالية، يزيد هذا الإعداد قليلاً
تستخدم ذاكرة Valgrind باعتبارها الكتلة تحتوي على مرجعين بدلاً من مرجعين.
بدافع تخصيص، فقط تتبع مكدس التخصيص يتم تسجيله (والإبلاغ عنه). مع مجاني,
يتم تسجيل تتبع مكدس إلغاء تخصيص (والإبلاغ عنه) فقط. هذه القيم نوعا ما
تقليل استخدام ذاكرة Valgrind ووحدة المعالجة المركزية. يمكن أن تكون مفيدة اعتمادًا على الخطأ
الأنواع التي تبحث عنها ومستوى التفاصيل التي تحتاجها لتحليلها. ل
على سبيل المثال ، إذا كنت مهتمًا فقط بأخطاء تسرب الذاكرة ، فهذا يكفي للتسجيل
تتبعات مكدس التخصيص.
بدافع لا شيء، لم يتم تسجيل أي آثار مكدس لعمليات malloc والحرة. إذا كان لديك
يخصص البرنامج الكثير من الكتل و / أو يخصص / يحرر من العديد من المكدس المختلفة
يمكن أن يؤدي ذلك إلى تقليل وحدة المعالجة المركزية و / أو الذاكرة المطلوبة بشكل كبير. بالطبع ، قليل
سيتم الإبلاغ عن التفاصيل للأخطاء المتعلقة بكتل الكومة.
لاحظ أنه بمجرد تسجيل تتبع المكدس ، تحتفظ Valgrind بتتبع المكدس في الذاكرة
حتى لو لم تتم الإشارة إليه من قبل أي كتلة. بعض البرامج (على سبيل المثال ، العودية
الخوارزميات) يمكن أن تولد عددًا كبيرًا من آثار المكدس. إذا كان Valgrind يستخدم الكثير
الذاكرة في مثل هذه الظروف ، يمكنك تقليل الذاكرة المطلوبة مع الخيارات
- keep-stacktraces و / أو باستخدام قيمة أصغر للخيار - عدد المتصلين.
--freelist-vol = [إفتراضي: 20000000]
عندما يقوم برنامج العميل بإصدار الذاكرة باستخدام ملفات مجاني (في C) أو حذف (C ++) ، تلك الذاكرة
لم يتم إتاحته على الفور لإعادة التخصيص. بدلا من ذلك ، تم وضع علامة عليه
يتعذر الوصول إليها ووضعها في طابور من الكتل المحررة. الغرض هو التأجيل طالما
ممكن النقطة التي تعود عندها الذاكرة المحررة إلى التداول. هذا
يزيد من فرصة أن تكون Memcheck قادرة على اكتشاف عمليات الوصول غير الصالحة إلى الكتل
لبعض الوقت بعد إطلاق سراحهم.
يحدد هذا الخيار الحجم الإجمالي الأقصى ، بالبايت ، للكتل الموجودة في قائمة الانتظار.
القيمة الافتراضية هي عشرين مليون بايت. زيادة هذا يزيد المبلغ الإجمالي
من الذاكرة المستخدمة من قبل Memcheck ولكن قد تكتشف الاستخدامات غير الصالحة للكتل المحررة والتي من شأنها
خلاف ذلك تذهب دون أن يتم اكتشافها.
- كتل حرة كبيرة = [إفتراضي: 1000000]
عند إتاحة الكتل من قائمة انتظار الكتل المحررة لإعادة التخصيص ،
سيعيد Memcheck بالأولوية إعادة توزيع الكتل بحجم أكبر أو يساوي
- كتل حرة كبيرة. هذا يضمن تحرير الكتل الكبيرة (على وجه الخصوص التحرير
كتل أكبر من --freelist- المجلد) لا يؤدي على الفور إلى إعادة تداول
كل (أو الكثير) الكتل الصغيرة في القائمة المجانية. بمعنى آخر ، هذا الخيار
يزيد من احتمالية اكتشاف المؤشرات المتدلية للكتل "الصغيرة" ، حتى
عندما يتم تحرير الكتل الكبيرة.
تعيين القيمة 0 يعني إعادة توزيع جميع الكتل بترتيب FIFO.
--workaround-gcc296-bugs = [إفتراضي: لا]
عند التمكين ، افترض أنه يقرأ ويكتب مسافة صغيرة أسفل مؤشر المكدس
بسبب أخطاء في دول مجلس التعاون الخليجي 2.96 ، ولم يبلغ عنها. "المسافة الصغيرة" 256
بايت بشكل افتراضي. لاحظ أن GCC 2.96 هو المترجم الافتراضي في بعض أنظمة Linux القديمة
التوزيعات (RedHat 7.X) ولذا قد تحتاج إلى استخدام هذا الخيار. لا تستخدمه إذا
لست مضطرًا لذلك ، فقد يتسبب ذلك في التغاضي عن أخطاء حقيقية. بديل أفضل
هو استخدام أحدث إصدار من GCC حيث تم إصلاح هذا الخطأ.
قد تحتاج أيضًا إلى استخدام هذا الخيار عند العمل مع GCC 3.X أو 4.X على 32 بت
باور بي سي لينكس. هذا لأن مجلس التعاون الخليجي ينشئ رمزًا يمكن الوصول إليه أحيانًا أدناه
مؤشر المكدس ، خاصة بالنسبة للفاصلة العائمة إلى / من تحويلات الأعداد الصحيحة. هذا
ينتهك مواصفات PowerPC ELF 32 بت ، والتي لا تنص على
المواقع الموجودة أسفل مؤشر المكدس ليتم الوصول إليها.
- عرض غير متطابق - يحرر = [إفتراضي: نعم]
عند التمكين ، يتحقق Memcheck من إلغاء تخصيص كتل الكومة باستخدام وظيفة
يطابق وظيفة التخصيص. هذا هو ما تتوقعه مجاني لاستخدامها في إلغاء التخصيص
الكتل المخصصة بواسطة malloc, حذف للكتل المخصصة بواسطة جديدو حذف[] لـ
الكتل المخصصة بواسطة جديد[]. إذا تم الكشف عن عدم تطابق ، يتم الإبلاغ عن خطأ. في هذا
عام مهم لأنه في بعض البيئات ، يتم تحرير وظيفة غير مطابقة
يمكن أن يسبب حوادث.
ومع ذلك ، هناك سيناريو لا يمكن فيه تجنب حالات عدم التطابق هذه. هذا عندما
يوفر المستخدم تطبيقات جديد/جديد[] تلك المكالمة malloc و حذف/حذف[]
تلك المكالمة مجاني، وهذه الوظائف مضمنة بشكل غير متماثل. على سبيل المثال ، تخيل
أن حذف[] مضمنة ولكن جديد[] ليس. والنتيجة هي أن Memcheck "يرى" كل شيء
حذف[] المكالمات كمكالمات مباشرة إلى مجاني، حتى إذا كان مصدر البرنامج لا يحتوي على
مكالمات غير متطابقة.
هذا يسبب الكثير من تقارير الخطأ المربكة وغير ذات الصلة.
- عرض غير متطابق - يحرر = لا تعطيل هذه الشيكات. لا ينصح بشكل عام
ومع ذلك ، قم بتعطيلها ، لأنك قد تفوتك أخطاء حقيقية نتيجة لذلك.
- النطاقات اللانهائية = 0xPP-0xQQ [، 0xRR-0xSS]
أي نطاقات مدرجة في هذا الخيار (ويمكن تحديد نطاقات متعددة ، مفصولة بـ
commas) عن طريق التحقق من قابلية العنونة في Memcheck.
- تعبئة صغيرة =
يملأ الكتل المخصصة بواسطة malloc ، والجديد ، وما إلى ذلك ، ولكن ليس من خلال calloc ، مع المحدد
بايت. يمكن أن يكون هذا مفيدًا عند محاولة التخلص من مشكلات تلف الذاكرة الغامضة.
لا تزال Memcheck تعتبر المنطقة المخصصة غير محددة - هذا الخيار فقط
يؤثر على محتوياته. لاحظ أن --ملء صغير لا يؤثر على كتلة من الذاكرة عندما
يتم استخدامه كوسيطة لطلبات العميل VALGRIND_MEMPOOL_ALLOC أو
VALGRIND_MALLOCLIKE_BLOCK.
- ملء مجاني =
يملأ الكتل المحررة بالمجان ، أو الحذف ، أو ما إلى ذلك ، بقيمة البايت المحددة. هذا يمكن أن يكون
مفيد عند محاولة التخلص من مشاكل تلف الذاكرة الغامضة. المنطقة المحررة
لا يزال يعتبر Memcheck غير صالح للوصول - يؤثر هذا الخيار فقط على ملفات
محتويات. لاحظ أن - تعبئة مجانية لا يؤثر على كتلة من الذاكرة عند استخدامه كملف
وسيطة للعميل يطلب VALGRIND_MEMPOOL_FREE أو VALGRIND_FREELIKE_BLOCK.
كاشيجريند OPTIONS
--I1 = و و الحجم>
حدد الحجم والترابط وحجم الخط لذاكرة التخزين المؤقت لتعليمات المستوى 1.
- D1 = و و الحجم>
حدد الحجم والترابط وحجم الخط لذاكرة التخزين المؤقت لبيانات المستوى 1.
--LL = و و الحجم>
حدد الحجم والترابط وحجم الخط لذاكرة التخزين المؤقت من المستوى الأخير.
--cache-sim = لا | نعم [نعم]
لتمكين أو تعطيل مجموعة الوصول إلى ذاكرة التخزين المؤقت والأعداد المفقودة.
--branch-sim = لا | نعم [لا]
تمكين أو تعطيل جمع تعليمات الفرع وحساب الخطأ في التنبؤ. بواسطة
يتم تعطيل هذا الإعداد افتراضيًا لأنه يؤدي إلى إبطاء Cachegrind بنسبة 25٪ تقريبًا. لاحظ أن
لا يمكنك تحديد - ذاكرة التخزين المؤقت سيم = لا و - فرع سيم = لا معًا ، لأن ذلك سيغادر
Cachegrind مع عدم وجود معلومات لجمعها.
--cachegrind-out-file =
اكتب بيانات ملف التعريف في ملف بدلاً من ملف الإخراج الافتراضي ،
cachegrind.out. . ال %p و %q يمكن استخدام محددات التنسيق لتضمين العملية
المعرف و / أو محتويات متغير البيئة في الاسم ، كما هو الحال بالنسبة لـ
الخيار الأساسي --ملف تسجيل.
كالجرند OPTIONS
- Callgrind-out-file =
اكتب بيانات ملف التعريف في ملف بدلاً من ملف الإخراج الافتراضي ،
callgrind.out. . ال %p و %q يمكن استخدام محددات التنسيق لتضمين العملية
المعرف و / أو محتويات متغير البيئة في الاسم ، كما هو الحال بالنسبة لـ
الخيار الأساسي --ملف تسجيل. عند إجراء عمليات تفريغ متعددة ، يتم تعديل اسم الملف
إضافي؛ انظر أدناه.
- خط التفريغ = [إفتراضي: نعم]
يحدد هذا أن عد الأحداث يجب أن يتم على مستوى دقة خط المصدر.
هذا يسمح بتعليق المصدر للمصادر التي تم تجميعها مع معلومات التصحيح
(-g).
- تفريغ instr = [إفتراضي: لا]
يحدد هذا أنه يجب إجراء عد الأحداث بدقة لكل تعليمات.
هذا يسمح للتعليق التوضيحي رمز التجميع. حاليا يمكن فقط عرض النتائج
بواسطة KCachegrind.
- سلاسل الضغط = [إفتراضي: نعم]
يؤثر هذا الخيار على تنسيق الإخراج لبيانات ملف التعريف. وهي تحدد ما إذا كان
يجب تحديد السلاسل (أسماء الملفات والوظائف) بالأرقام. هذا ينكمش
الملف ، ولكنه يجعل قراءته أكثر صعوبة (وهو أمر لا يوصى به في أي ملف
قضية).
- ضغط نقاط البيع = [إفتراضي: نعم]
يؤثر هذا الخيار على تنسيق الإخراج لبيانات ملف التعريف. وهي تحدد ما إذا كان
يتم دائمًا تحديد المواضع الرقمية كقيم مطلقة أو يُسمح بذلك
نسبة إلى الأرقام السابقة. هذا يقلل من حجم الملف.
- مقالب مجمعة = [إفتراضي: لا]
عند التمكين ، عندما يتم إنشاء أجزاء متعددة من بيانات الملف الشخصي ، يتم إنشاء هذه الأجزاء
يتم إلحاقه بنفس ملف الإخراج. لا ينصح.
- تفريغ كل ب ب = [إفتراضي: 0, أبداً]
تفريغ بيانات الملف الشخصي كل عد الكتل الأساسية. يتم فحص ما إذا كانت هناك حاجة إلى تفريغ فقط
عند تشغيل برنامج الجدولة الداخلية في Valgrind. لذلك ، فإن الإعداد الأدنى المفيد هو
حوالي 100000. العدد هو قيمة 64 بت لجعل فترات التفريغ الطويلة ممكنة.
- تفريغ قبل =
تفريغ عند الدخول وظيفة.
- صفر قبل =
صفر جميع التكاليف عند الدخول وظيفة.
- تفريغ بعد =
تفريغ عند المغادرة وظيفة.
--instr-atstart = [إفتراضي: نعم]
حدد ما إذا كنت تريد أن يبدأ Callgrind المحاكاة والتنميط من بداية
البرنامج. عند الضبط على لا ، لن يتمكن Callgrind من جمع أي معلومات ،
بما في ذلك المكالمات ، ولكن سيكون لها تباطؤ على الأكثر بحوالي 4 ، وهو الحد الأدنى
Valgrind النفقات العامة. يمكن تمكين الأجهزة بشكل تفاعلي عبر callgrind_control
-أيون.
لاحظ أن الرسم البياني للاستدعاء الناتج لن يحتوي على الأرجح رئيسي، لكن سوف
تحتوي على جميع الوظائف المنفذة بعد تمكين الأجهزة. الأجهزة
يمكن أيضا تمكين / تعطيل برمجيا. راجع Callgrind تضمين ملف callgrind.h
للماكرو الذي يجب عليك استخدامه في شفرة المصدر الخاصة بك.
لمحاكاة ذاكرة التخزين المؤقت ، ستكون النتائج أقل دقة عند تشغيل الأجهزة
لاحقًا في تشغيل البرنامج ، حيث يبدأ المحاكي بذاكرة تخزين مؤقت فارغة في تلك اللحظة.
قم بتشغيل مجموعة الأحداث لاحقًا للتعامل مع هذا الخطأ.
--collect-atstart = [إفتراضي: نعم]
حدد ما إذا كان سيتم تمكين مجموعة الحدث في بداية تشغيل ملف التعريف.
لإلقاء نظرة على أجزاء من برنامجك فقط ، لديك احتمالان:
1. لا توجد عدادات للأحداث قبل الدخول إلى جزء البرنامج الذي تريد تشكيله ، وتفريغه
يتعارض الحدث مع ملف بعد مغادرة جزء البرنامج هذا.
2. قم بتشغيل / إيقاف حالة التجميع حسب الحاجة لمشاهدة عدادات الأحداث فقط
أثناء وجودك داخل جزء البرنامج الذي تريد تكوينه.
يمكن استخدام الخيار الثاني إذا كان جزء البرنامج الذي تريد تكوين ملف تعريفه يسمى العديد
مرات. الخيار 1 ، أي إنشاء الكثير من عمليات تفريغ النفايات ليس عمليًا هنا.
يمكن تبديل حالة المجموعة عند الدخول والخروج من وظيفة معينة باستخدام الخيار
--تبديل جمع. إذا كنت تستخدم هذا الخيار ، فيجب تعطيل حالة المجموعة في
بداية. لاحظ أن مواصفات --تبديل جمع مجموعات ضمنية
- حالة الجمع = لا.
يمكن أيضًا تبديل حالة المجموعة عن طريق إدخال طلب العميل
CALLGRIND_TOGGLE_COLLECT ، في مواقع الكود المطلوبة.
--تبديل جمع =
تبديل المجموعة عند الدخول / الخروج من وظيفة.
- جمع القفزات = [إفتراضي: لا]
يحدد هذا ما إذا كان يجب جمع معلومات عن القفزات (المشروطة). مثل
أعلاه ، لا تستطيع callgrind_annotate حاليًا عرض البيانات لك. عليك أن تستخدم
KCachegrind للحصول على أسهم الانتقال في التعليمات البرمجية المشروحة.
- جمع النظام = [إفتراضي: لا]
يحدد هذا ما إذا كان يجب جمع المعلومات الخاصة بأوقات مكالمات النظام.
- جمع الحافلة = [إفتراضي: لا]
يحدد هذا ما إذا كان يجب جمع عدد أحداث الناقل العالمية المنفذة.
يتم استخدام نوع الحدث "Ge" لهذه الأحداث.
- ذاكرة التخزين المؤقت سيم = [إفتراضي: لا]
حدد ما إذا كنت تريد إجراء محاكاة كاملة لذاكرة التخزين المؤقت. بشكل افتراضي ، يتم قراءة التعليمات فقط
سيتم احتساب الوصول ("عير"). مع محاكاة ذاكرة التخزين المؤقت ، تكون عدادات الأحداث الأخرى
ممكّن: ذاكرة التخزين المؤقت تفتقد لقراءة التعليمات ("I1mr" / "ILmr") ، وصول قراءة البيانات ("Dr")
وما يتعلق بها من أخطاء في ذاكرة التخزين المؤقت ("D1mr" / "DLmr") ووصول لكتابة البيانات ("Dw") وذاكرة التخزين المؤقت ذات الصلة
يخطئ ("D1mw" / "DLmw"). لمزيد من المعلومات ، راجع Cachegrind: ذاكرة التخزين المؤقت والفرع-
ملف تعريف التنبؤ.
- فرع سيم = [إفتراضي: لا]
حدد ما إذا كنت تريد إجراء محاكاة للتنبؤ بالفرع. مزيد من عدادات الحدث
مُمكّن: عدد الفروع الشرطية المنفذة وأخطاء التوقع ذات الصلة
("Bc" / "Bcm") ، تم تنفيذ قفزات غير مباشرة وما يرتبط بها من أخطاء في توقع عنوان الانتقال
("بي" / "بيم").
هيلجريند OPTIONS
- حرية الكتابة = لا | نعم [إفتراضي: لا]
عند التمكين (ليس الإعداد الافتراضي) ، يتعامل Helgrind مع تحرير ذاكرة الكومة كما لو كان ملف
تم كتابة الذاكرة مباشرة قبل الحرة. هذا يفضح الأجناس حيث الذاكرة
تتم الإشارة إليها بواسطة مؤشر ترابط واحد ، وتحريرها بواسطة مؤشر آخر ، ولكن لا يمكن ملاحظتها
حدث التزامن للتأكد من أن المرجع يحدث قبل الإصدار المجاني.
هذه الوظيفة جديدة في Valgrind 3.7.0 وتعتبر تجريبية. إنها
لم يتم تمكينه افتراضيًا لأن تفاعله مع مخصصات الذاكرة المخصصة ليس كذلك
مفهومة جيدا في الوقت الحاضر. نرحب بتعليقات المستخدمين.
--track-lockorders = لا | نعم [إفتراضي: نعم]
عند التمكين (الافتراضي) ، يقوم Helgrind بإجراء فحص تناسق أمر القفل. ل
بعض برامج عربات التي تجرها الدواب ، يمكن أن يصبح العدد الكبير من أخطاء أمر القفل المبلغ عنها
مزعج ، خاصة إذا كنت مهتمًا فقط بأخطاء السباق. لذلك يمكنك ذلك
تجد أنه من المفيد تعطيل فحص أمر القفل.
- مستوى التاريخ = لا شيء | تقريبًا | كامل [إفتراضي: ممتلىء]
- مستوى التاريخ = ممتلئ (الافتراضي) يتسبب في قيام Helgrind بجمع معلومات كافية حول
عمليات الوصول "القديمة" التي يمكن أن تنتج تتبعين للمكدس في تقرير سباق - كلا المكدس
تتبع الوصول الحالي ، وتتبع الوصول المتعارض الأقدم. ل
الحد من استخدام الذاكرة ، تقتصر عمليات تتبع المكدس "القديمة" على 8 إدخالات كحد أقصى ،
حتى لو - عدد المتصلين القيمة أكبر.
جمع مثل هذه المعلومات مكلف من حيث السرعة والذاكرة ، خاصة بالنسبة لـ
البرامج التي تقوم بالعديد من أحداث التزامن بين مؤشرات الترابط (أقفال ، فتح ، إلخ).
بدون هذه المعلومات ، يكون من الصعب تعقب الأسباب الجذرية للأعراق.
ومع ذلك ، قد لا تحتاج إليه في المواقف التي تريد فقط التحقق من ملف
وجود أو عدم وجود أجناس ، على سبيل المثال ، عند إجراء اختبار الانحدار لـ
برنامج خالي من السباق سابقًا.
- مستوى التاريخ = لا شيء هو النقيض المتطرف. يتسبب في عدم قيام Helgrind بجمع أي منها
معلومات حول عمليات الوصول السابقة. يمكن أن يكون هذا أسرع من
- مستوى التاريخ = ممتلئ.
- مستوى التاريخ = تقريبًا يوفر حلا وسطا بين هذين النقيضين. تسبب
Helgrind لإظهار تتبع كامل للوصول اللاحق ، ومعلومات تقريبية
فيما يتعلق بالوصول السابق. تتكون هذه المعلومات التقريبية من مكدسين ، و
من المؤكد أن الوصول المبكر قد حدث في مكان ما بين نقاط البرنامج
تدل عليه المداخن. هذا ليس مفيدًا مثل إظهار المكدس الدقيق لـ
الوصول السابق (مثل - مستوى التاريخ = ممتلئ يفعل) ، لكنه أفضل من لا شيء ، وهو
يكاد يكون بنفس سرعة - مستوى التاريخ = لا شيء.
- حجم ذاكرة التخزين المؤقت للنزاع = N [إفتراضي: 1000000]
هذه العلامة لها أي تأثير فقط في - مستوى التاريخ = ممتلئ.
يتم تخزين المعلومات حول عمليات الوصول المتضاربة "القديمة" في ذاكرة تخزين مؤقت ذات حجم محدود ،
مع إدارة على غرار LRU. هذا ضروري لأنه ليس من العملي تخزين ملف
تتبع المكدس لكل وصول إلى الذاكرة تم إجراؤه بواسطة البرنامج. معلومات تاريخية
على المواقع التي لم يتم الوصول إليها مؤخرًا ، يتم تجاهلها بشكل دوري ، لتحرير مساحة في
مخبأ.
يتحكم هذا الخيار في حجم ذاكرة التخزين المؤقت ، من حيث عدد الذاكرة المختلفة
العناوين التي يتم تخزين معلومات الوصول المتضاربة لها. إذا وجدت ذلك
يعرض Helgrind أخطاء السباق مع مكدس واحد فقط بدلاً من الاثنين المتوقعين
أكوام ، حاول زيادة هذه القيمة.
الحد الأدنى للقيمة هو 10,000،30,000,000 والحد الأقصى هو XNUMX،XNUMX،XNUMX (ثلاثون ضعف القيمة الافتراضية
قيمة). تؤدي زيادة القيمة بمقدار 1 إلى زيادة متطلبات ذاكرة Helgrind بنسبة كبيرة
ما يقرب من 100 بايت ، لذا فإن القيمة القصوى ستستهلك بسهولة ثلاثة جيجابايت إضافية أو نحو ذلك
من الذاكرة.
--check-stack-refs = لا | نعم [إفتراضي: نعم]
بشكل افتراضي ، يتحقق Helgrind من جميع عمليات الوصول إلى ذاكرة البيانات التي تم إجراؤها بواسطة برنامجك. هذا العلم
تمكنك من تخطي التحقق من الوصول إلى أكوام الخيوط (المتغيرات المحلية). هذا يمكن
تحسين الأداء ، ولكن يأتي على حساب السباقات المفقودة على البيانات المخصصة للمكدس.
- تجاهل-الخيط-الخيط = [إفتراضي: لا]
يتحكم في ما إذا كان يجب تجاهل جميع الأنشطة أثناء إنشاء سلسلة الرسائل. بشكل افتراضي
مُمكّن فقط على Solaris. يوفر Solaris إنتاجية أعلى وتوازيًا و
قابلية التوسع من أنظمة التشغيل الأخرى ، على حساب تأمين أكثر دقة
نشاط. هذا يعني على سبيل المثال أنه عندما يتم إنشاء خيط تحت glibc ، يكون واحدًا فقط
يستخدم القفل الكبير لجميع إعدادات الخيط. يستخدم Solaris libc العديد من الأقفال الدقيقة
ويستأنف موضوع المنشئ أنشطته في أسرع وقت ممكن ، ويترك على سبيل المثال
مكدس وتسلسل إعداد TLS إلى مؤشر الترابط الذي تم إنشاؤه. هذا الموقف يربك Helgrind
لأنه يفترض وجود بعض الترتيب الخاطئ بين الخالق والمخلوق
خيط؛ وبالتالي فإن العديد من أنواع شروط السباق في التطبيق لن تكون كذلك
ذكرت. لمنع مثل هذا الترتيب الخاطئ ، يتم تعيين خيار سطر الأوامر هذا على نعم بواسطة
الافتراضي في سولاريس. لذلك يتم تجاهل جميع الأنشطة (الأحمال ، المخازن ، طلبات العملاء)
خلال:
· دعوة pthread_create () في موضوع الخالق
مرحلة إنشاء الخيط (كومة وإعداد TLS) في الخيط الذي تم إنشاؤه
كما يتم إلغاء تعقب الذاكرة الجديدة المخصصة أثناء إنشاء مؤشر الترابط ، أي تقارير السباق
هناك قمع. يقوم DRD بنفس الشيء ضمنيًا. هذا ضروري لأن
يقوم Solaris libc بتخزين العديد من العناصر مؤقتًا وإعادة استخدامها لخيوط مختلفة وذلك
يخلط بين Helgrind.
DRD OPTIONS
--check-stack-var = [إفتراضي: لا]
يتحكم في ما إذا كان DRD يكتشف سباقات البيانات على متغيرات المكدس. التحقق من متغيرات المكدس
معطل افتراضيًا لأن معظم البرامج لا تشارك متغيرات المكدس
الخيوط.
- العتبة الحصرية = [إفتراضي: عن]
اطبع رسالة خطأ إذا تم تعليق أي قفل مزامنة أو قفل للكاتب لفترة أطول من الوقت
المحدد بالمللي ثانية. يتيح هذا الخيار الكشف عن تنازع القفل.
- انضم إلى قائمة المجلد = [إفتراضي: 10]
سباقات البيانات التي تحدث بين جملة في نهاية مؤشر ترابط وآخر مؤشر ترابط
يمكن تفويتها إذا تم تجاهل معلومات الوصول إلى الذاكرة فورًا بعد أن يحتوي الموضوع على
تم الانضمام. يتيح هذا الخيار للفرد تحديد عدد ذاكرة الخيوط المنضمة
يجب الاحتفاظ بمعلومات الوصول.
- السباق الأول فقط = [إفتراضي: لا]
ما إذا كان سيتم الإبلاغ فقط عن سباق البيانات الأول الذي تم اكتشافه في موقع الذاكرة
أو كل سباقات البيانات التي تم اكتشافها في موقع الذاكرة.
- حرية الكتابة = [إفتراضي: لا]
ما إذا كان سيتم الإبلاغ عن السباقات بين الوصول إلى الذاكرة وتحرير الذاكرة. تمكين هذا
قد يتسبب الخيار في تشغيل DRD بشكل أبطأ قليلاً. ملحوظات:
· لا تقم بتمكين هذا الخيار عند استخدام مخصصات الذاكرة المخصصة التي تستخدم
VG_USERREQ__MALLOCLIKE_BLOCK و VG_USERREQ__FREELIKE_BLOCK لأن ذلك
يؤدي إلى نتائج إيجابية خاطئة.
· لا تقم بتمكين هذا الخيار عند استخدام الكائنات التي تم عدها كمرجع لأن ذلك سيفعل
يؤدي إلى نتائج إيجابية خاطئة ، حتى عندما يتم إضافة تعليق توضيحي لهذا الرمز بشكل صحيح باستخدام
ANNOTATE_HAPPENS_BEFORE و ANNOTATE_HAPPENS_AFTER. انظر على سبيل المثال إخراج
الأمر التالي على سبيل المثال: valgrind --tool = drd --free-is-write = yes
drd / الاختبارات / annotate_smart_pointer.
- تقرير إشارة مقفلة = [إفتراضي: نعم]
ما إذا كان سيتم الإبلاغ عن المكالمات إلى pthread_cond_signal و pthread_cond_broadcast حيث
كائن المزامنة المرتبط بالإشارة من خلال pthread_cond_wait or
pthread_cond_timed_waitلم يتم قفله في وقت إرسال الإشارة. إرسال إشارة
بدون الضغط على قفل كائن المزامنة (mutex) المرتبط به هو خطأ برمجة شائع يمكن أن يحدث
تسبب ظروف سباق خفية وسلوك غير متوقع. يوجد بعض غير المألوف
ومع ذلك ، فإن أنماط المزامنة حيث يكون من الآمن إرسال إشارة دون الضغط على ملف
قفل على كائن المزامنة المرتبط.
- دمج القطع = [إفتراضي: نعم]
دمج قسم الضوابط. دمج الأجزاء عبارة عن خوارزمية للحد من استخدام الذاكرة لملف
خوارزمية الكشف عن سباق البيانات. قد يؤدي تعطيل دمج المقطع إلى تحسين دقة
ما يسمى بـ "الشرائح الأخرى" المعروضة في تقارير السباق ولكنها يمكن أن تؤدي أيضًا إلى الخروج
من خطأ في الذاكرة.
- فاصل دمج القطع = [إفتراضي: 10]
قم بإجراء دمج المقاطع فقط بعد أن يكون العدد المحدد من المقاطع الجديدة
مخلوق. هذا خيار تكوين متقدم يسمح للشخص باختيار ما إذا كان يريد أم لا
تقليل استخدام ذاكرة DRD عن طريق اختيار قيمة منخفضة أو السماح بتشغيل DRD بشكل أسرع بواسطة
اختيار قيمة أعلى قليلاً. تعتمد القيمة المثلى لهذه المعلمة على
البرنامج الجاري تحليله. تعمل القيمة الافتراضية بشكل جيد مع معظم البرامج.
- عتبة مشتركة = [إفتراضي: عن]
اطبع رسالة خطأ إذا تم تعليق قفل القارئ لفترة أطول من الوقت المحدد
(بالمللي ثانية). يتيح هذا الخيار الكشف عن تنازع القفل.
- إظهار-Confl-seg = [إفتراضي: نعم]
إظهار الأجزاء المتضاربة في تقارير السباق. نظرًا لأن هذه المعلومات يمكن أن تساعد في العثور على ملف
بسبب سباق البيانات ، يتم تمكين هذا الخيار افتراضيًا. تعطيل هذا الخيار يجعل
إخراج DRD أكثر إحكاما.
- عرض المكدس الاستخدام = [إفتراضي: لا]
استخدام مكدس الطباعة في وقت خروج مؤشر الترابط. عندما يقوم برنامج بإنشاء عدد كبير من
مؤشرات الترابط يصبح من المهم تحديد مقدار الذاكرة الظاهرية المخصصة لها
أكوام الخيط. يتيح هذا الخيار إمكانية ملاحظة مقدار ذاكرة المكدس
يستخدمه كل موضوع من برنامج العميل. ملاحظة: أداة DRD نفسها تخصص بعض ملفات
بيانات مؤقتة على كومة مؤشر ترابط العميل. المساحة اللازمة لهذه البيانات المؤقتة
يجب أن يتم تخصيصها من قبل برنامج العميل عندما يخصص ذاكرة مكدس ، لكنه ليس كذلك
مدرج في استخدام المكدس الذي أبلغ عنه DRD.
- تجاهل-الخيط-الخيط = [إفتراضي: لا]
يتحكم في ما إذا كان يجب تجاهل جميع الأنشطة أثناء إنشاء سلسلة الرسائل. بشكل افتراضي
مُمكّن فقط على Solaris. يوفر Solaris إنتاجية أعلى وتوازيًا و
قابلية التوسع من أنظمة التشغيل الأخرى ، على حساب تأمين أكثر دقة
نشاط. هذا يعني على سبيل المثال أنه عندما يتم إنشاء خيط تحت glibc ، يكون واحدًا فقط
يستخدم القفل الكبير لجميع إعدادات الخيط. يستخدم Solaris libc العديد من الأقفال الدقيقة
ويستأنف موضوع المنشئ أنشطته في أسرع وقت ممكن ، ويترك على سبيل المثال
مكدس وتسلسل إعداد TLS إلى مؤشر الترابط الذي تم إنشاؤه. هذا الموقف يخلط بين DRD
يفترض وجود بعض الترتيب الخاطئ بين المنشئ والخيط الذي تم إنشاؤه ؛ و
لذلك لن يتم الإبلاغ عن العديد من أنواع ظروف السباق في التطبيق. ل
لمنع مثل هذا الترتيب الخاطئ ، يتم تعيين خيار سطر الأوامر هذا على نعم افتراضيًا في
سولاريس. لذلك يتم تجاهل جميع الأنشطة (الأحمال ، المخازن ، طلبات العملاء) أثناء:
· دعوة pthread_create () في موضوع الخالق
مرحلة إنشاء الخيط (كومة وإعداد TLS) في الخيط الذي تم إنشاؤه
--تتبع- addr = [إفتراضي: لا أحد]
تتبع كل أنشطة التحميل والتخزين للعنوان المحدد. قد يكون هذا الخيار
محدد أكثر من مرة.
--ptrace-addr = [إفتراضي: لا أحد]
تتبع كل أنشطة التحميل والتخزين للعنوان المحدد واستمر في القيام بذلك حتى
بعد تحرير الذاكرة الموجودة على هذا العنوان وإعادة تخصيصها.
--تتبع-تخصيص = [إفتراضي: لا]
تتبع كافة عمليات تخصيص الذاكرة وإلغاء التخصيصات. قد تنتج كمية هائلة من المخرجات.
- حاجز التتبع = [إفتراضي: لا]
تتبع كل نشاط الحاجز.
--trace-cond = [إفتراضي: لا]
تتبع كل نشاط متغير الشرط.
- -تتبع-شوكة-الانضمام = [إفتراضي: لا]
تتبع إنشاء جميع سلاسل الرسائل وجميع أحداث إنهاء سلسلة الرسائل.
--تتبع- hb = [إفتراضي: لا]
تتبع تنفيذ ANNOTATE_HAPPENS_BEFORE () و ANNOTATE_HAPPENS_AFTER () و
ANNOTATE_HAPPENS_DONE () طلبات العميل.
- تتبع- كائن المزامنة = [إفتراضي: لا]
تتبع كل نشاط كائن المزامنة (mutex).
--تتبع- rwlock = [إفتراضي: لا]
تتبع كل نشاط قفل القارئ والكاتب.
--تتبع-إشارة = [إفتراضي: لا]
تتبع كل نشاط إشارة.
مصيف OPTIONS
- كومة = [إفتراضي: نعم]
تحديد ما إذا كان يجب إجراء إنشاء ملفات تعريف كومة الذاكرة المؤقتة.
- قفزة المسؤول = [إفتراضي: 8]
إذا تم تمكين إنشاء ملفات تعريف الكومة ، يعطي عدد وحدات البايت الإدارية لكل كتلة
يستخدم. يجب أن يكون هذا تقديرًا للمتوسط ، لأنه قد يختلف. على سبيل المثال ، ملف
المخصص الذي يستخدمه glibc على Linux يتطلب ما بين 4 إلى 15 بايت لكل كتلة ،
حسب عوامل مختلفة. يتطلب هذا المخصص أيضًا مساحة إدارية لتحريرها
كتل ، ولكن ماسيف لا يمكن تفسير ذلك.
- أكوام = [إفتراضي: لا]
تحديد ما إذا كان يجب إجراء تشكيل جانبي للمكدس. هذا الخيار يبطئ ماسيف
إلى حد كبير ، وهكذا يتم إيقاف تشغيله افتراضيًا. لاحظ أن Massif تفترض أن المكدس الرئيسي لديه
حجم الصفر عند بدء التشغيل. هذا ليس صحيحًا ، لكن القيام بخلاف ذلك بدقة أمر صعب.
علاوة على ذلك ، يشير البدء من الصفر بشكل أفضل إلى حجم جزء المكدس الرئيسي
أن برنامج المستخدم يتحكم فيه بالفعل.
- الصفحات في شكل كومة = [إفتراضي: لا]
يخبر Massif بتوصيف الذاكرة على مستوى الصفحة بدلاً من كتلة malloc'd
مستوى. انظر أعلاه للحصول على التفاصيل.
- العمق = [إفتراضي: 30]
تم تسجيل أقصى عمق لأشجار التخصيص للقطات التفصيلية. زيادتها
سيجعل Massif يعمل بشكل أبطأ إلى حد ما ، ويستخدم المزيد من الذاكرة ، وينتج مخرجات أكبر
الملفات.
--alloc-fn =
سيتم التعامل مع الوظائف المحددة مع هذا الخيار كما لو كانت كومة
وظيفة التخصيص مثل malloc. هذا مفيد للوظائف التي يتم تضمينها في أغلفة
malloc or جديد، والتي يمكن أن تملأ أشجار التخصيص بمعلومات رتيبة.
يمكن تحديد هذا الخيار عدة مرات في سطر الأوامر ، لتسمية متعددة
الوظائف.
لاحظ أنه لن يتم التعامل مع الوظيفة المسماة بهذه الطريقة إلا إذا كانت هي الإدخال العلوي في ملف
تتبع المكدس ، أو أسفل دالة أخرى تمت معالجتها بهذه الطريقة. على سبيل المثال ، إذا كان لديك
وظيفة مولوك هذا يلف mallocو مولوك هذا يلف مولوك، فقط التحديد
--alloc-fn = malloc2 لن يكون لها أي تأثير. تحتاج إلى تحديد --alloc-fn = malloc1 as
حسنًا. هذا غير مريح بعض الشيء ، لكن السبب هو أن التحقق من التخصيص
وظائف بطيئة ، وتوفر الكثير من الوقت إذا توقف Massif عن البحث من خلال
كدس إدخالات التتبع بمجرد العثور على واحدة لا تتطابق بدلاً من الاضطرار إليها
تواصل من خلال جميع الإدخالات.
لاحظ أن أسماء C ++ غير متشابكة. لاحظ أيضًا أنه يجب كتابة أسماء C ++ المحملة بشكل زائد
كليا. قد تكون علامات الاقتباس المنفردة ضرورية لمنع الغلاف من تفكيكها.
فمثلا:
--alloc-fn = 'عامل التشغيل جديد (بدون إشارة ، الأمراض المنقولة جنسياً :: nothrow_t const &)'
--ignore-fn =
أي تخصيص كومة مباشرة (أي دعوة إلى malloc, جديد، وما إلى ذلك ، أو استدعاء وظيفة
اسمه من قبل --alloc-fn option) التي تحدث في وظيفة محددة بواسطة هذا الخيار سوف
يتم تجاهله. هذا مفيد في الغالب لأغراض الاختبار. يمكن تحديد هذا الخيار
عدة مرات في سطر الأوامر ، لتسمية وظائف متعددة.
اي إعادة تخصيص من كتلة تم تجاهلها ، سيتم أيضًا تجاهلها ، حتى إذا كان إعادة تخصيص لا المكالمة
لا تحدث في وظيفة تم تجاهلها. هذا يتجنب احتمال وجود أحجام كومة سالبة
إذا تم تقليص الكتل التي تم تجاهلها مع إعادة تخصيص.
قواعد كتابة أسماء وظائف C ++ هي نفسها لقواعد --alloc-fn في الاعلى.
- العتبة = [إفتراضي: 1.0]
عتبة الأهمية لعمليات تخصيص الكومة ، كنسبة مئوية من إجمالي حجم الذاكرة.
سيتم تجميع إدخالات شجرة التخصيص التي تمثل أقل من ذلك. لاحظ أن
يجب تحديد هذا جنبًا إلى جنب مع خيار ms_print الذي يحمل نفس الاسم.
- عدم دقة الذروة = [إفتراضي: 1.0]
لا يسجل Massif بالضرورة ذروة تخصيص الذاكرة العالمية الفعلية ؛ بواسطة
افتراضيًا ، فإنه يسجل ذروة فقط عندما يتجاوز حجم تخصيص الذاكرة العمومية
الذروة السابقة بنسبة 1.0٪ على الأقل. هذا لأنه يمكن أن يكون هناك العديد من التخصيصات المحلية
على طول الطريق ، وسيكون عمل لقطة تفصيلية لكل منها مكلفًا
وإهدارًا ، حيث سيتم التخلص من جميعهم فيما بعد باستثناء واحد. يمكن أن يكون هذا عدم الدقة
تم تغييره (حتى إلى 0.0٪) عبر هذا الخيار ، لكن Massif سيعمل بشكل أبطأ بشكل كبير مثل
الرقم يقترب من الصفر.
- وحدة الوقت = [إفتراضي: i]
الوحدة الزمنية المستخدمة في التنميط. هناك ثلاثة احتمالات: التعليمات
تم التنفيذ (XNUMX) ، وهو أمر جيد في معظم الحالات ؛ الوقت الحقيقي (ساعة الحائط) (مللي ثانية ، أي
ميلي ثانية) ، والتي تكون مفيدة في بعض الأحيان ؛ والبايتات المخصصة / الموزعة على الكومة
و / أو المكدس (B) ، وهو مفيد للبرامج قصيرة المدى وللاختبار
الأغراض ، لأنها الأكثر استنساخًا عبر الأجهزة المختلفة.
- التكرار التفصيلي = [إفتراضي: 10]
معدل تكرار اللقطات التفصيلية. مع - التكرار التفصيلي = 1، كل لقطة مفصلة.
- ماكس- لقطات = [إفتراضي: 100]
تم تسجيل أقصى عدد من اللقطات. إذا تم الضبط على N ، فجميع البرامج باستثناء ملفات
على المدى القصير ، سيكون العدد النهائي للقطات بين N / 2 و N.
- ملف الكتلة = [إفتراضي: massif.out.٪ p]
اكتب بيانات ملف التعريف في ملف بدلاً من ملف الإخراج الافتراضي ،
ماسيف أوت. . ال %p و %q يمكن استخدام محددات التنسيق لتضمين معرف العملية
و / أو محتويات متغير البيئة في الاسم ، كما هو الحال بالنسبة لـ
الخيار الأساسي --ملف تسجيل.
سجشيك OPTIONS
لا توجد خيارات سطر أوامر خاصة بـ SGCheck في الوقت الحالي.
بي بي في OPTIONS
--bb-out-file = [إفتراضي: bb.out.٪ p]
يحدد هذا الخيار اسم ملف متجه الكتلة الأساسي. ال %p و %q شكل
يمكن استخدام المحددات لتضمين معرف العملية و / أو محتويات البيئة
متغير في الاسم ، كما هو الحال بالنسبة للخيار الأساسي --ملف تسجيل.
--pc-out-file = [إفتراضي: pc.out.٪ p]
يحدد هذا الخيار اسم ملف الكمبيوتر الشخصي. يحتوي هذا الملف على عناوين عداد البرامج
ومعلومات اسم الوظيفة لمختلف الكتل الأساسية. يمكن استخدام هذا بالتزامن
باستخدام ملف متجه الكتلة الأساسي للتقديم السريع عبر أسماء الوظائف بدلاً من مجرد
تحسب التعليمات. ال %p و %q يمكن استخدام محددات التنسيق لتضمين العملية
المعرف و / أو محتويات متغير البيئة في الاسم ، كما هو الحال بالنسبة لـ
الخيار الأساسي --ملف تسجيل.
- حجم الفاصل = [إفتراضي: 100000000]
يحدد هذا الخيار حجم الفاصل الزمني المراد استخدامه. الافتراضي هو 100 مليون
التعليمات ، وهي قيمة شائعة الاستخدام. يمكن استخدام أحجام أخرى ؛ الأصغر
يمكن أن تساعد الفواصل الزمنية البرامج ذات المراحل الدقيقة. لكن حجم الفاصل أصغر
يمكن أن يؤدي إلى مشكلات الدقة بسبب تأثيرات الإحماء (عند إعادة التوجيه السريع لمختلف ملفات
ستكون الميزات المعمارية غير مهيأة ، وسيستغرق الأمر بعضًا من
تعليمات قبل "الإحماء" إلى الحالة ، ستكون هناك محاكاة كاملة بدونها
التقديم السريع. تميل أحجام الفواصل الزمنية الكبيرة إلى التخفيف من حدة ذلك.)
- instr-count-only [إفتراضي: لا]
يخبر هذا الخيار الأداة بعرض إجمالي عدد التعليمات فقط ، وليس ذلك
إنشاء ملف متجه الكتلة الأساسي الفعلي. هذا مفيد في التصحيح و
جمع معلومات عدد التعليمات دون إنشاء متجه الكتلة الأساسي الكبير
الملفات.
لاكي OPTIONS
- التهم الأساسية = [إفتراضي: نعم]
عند التمكين ، يطبع Lackey الإحصائيات والمعلومات التالية حول
تنفيذ برنامج العميل:
1. عدد المكالمات للوظيفة المحددة بواسطة --fnname الخيار (الافتراضي
رئيسي). إذا تم تجريد رموز البرنامج ، فسيظل العدد دائمًا
صفر.
2. عدد الفروع المشروطة المصادفة وعدد ونسبة
تلك التي اتخذت.
3. عدد الكتل الكبيرة التي تم إدخالها وإكمالها بواسطة البرنامج. لاحظ أن بسبب
التحسينات التي قام بها JIT ، هذه ليست قيمة دقيقة على الإطلاق.
4. عدد الضيف (x86 ، amd64 ، ppc ، إلخ) تعليمات وبيانات IR
أعدم. IR هو تمثيل وسيط شبيه بـ Valgrind's RISC يمكن من خلاله للجميع
الأجهزة تتم.
5. النسب بين بعض هذه الأعداد.
6. كود الخروج من برنامج العميل.
- التهم المفصلة = [إفتراضي: لا]
عند التمكين ، يقوم Lackey بطباعة جدول يحتوي على عدد الأحمال والمخازن و ALU
عمليات متباينة حسب أنواع الأشعة تحت الحمراء الخاصة بهم. يتم تحديد أنواع الأشعة تحت الحمراء من خلال IR الخاصة بهم
الاسم ("I1" و "I8" و ... "I128" و "F32" و "F64" و "V128").
--تتبع-mem = [إفتراضي: لا]
عند التمكين ، يقوم Lackey بطباعة حجم وعنوان كل ذاكرة وصول تم إجراؤها بواسطة
البرنامج. انظر التعليقات في أعلى ملف الخادم / lk_main.c لمزيد من التفاصيل
حول تنسيق الإخراج ، وكيف يعمل ، وعدم الدقة في تتبع العنوان. ملحوظة
أن هذا الخيار ينتج كميات هائلة من المخرجات.
--تتبع - كتل عظمى = [إفتراضي: لا]
عند التمكين ، يطبع Lackey عنوان كل كتلة سوبربلوك (إدخال واحد ،
خروج متعدد ، جزء خطي من الكود) المنفذ بواسطة البرنامج. هذا في المقام الأول من
اهتمام مطوري Valgrind. انظر التعليقات في الجزء العلوي من الملف
خادم / lk_main.c للحصول على تفاصيل حول تنسيق الإخراج. لاحظ أن هذا الخيار ينتج
كميات كبيرة من الإنتاج.
--fnname = [إفتراضي: رئيسي]
يغير الوظيفة التي يتم حساب المكالمات عندها - التهم الأساسية = نعم محدد.
استخدم valgrind عبر الإنترنت باستخدام خدمات onworks.net