يوضّح لك هذا المستند كيفية تفعيل أدوات تصحيح الأخطاء الخاصة عند استخدام AGDE. يمكن لهذه الأدوات المساعدة في تشخيص مشاكل الذاكرة التلف والكتابة فوق الأخطاء.
مطهّر عنوان HWAddress ومطهّر العنوان
HWAddress Sanitizer (HWASan) والعنوان Sanitizer (ASan) هي أدوات لتصحيح تلف الذاكرة التي المساعدة في تصحيح تلف الذاكرة واستبدال الأخطاء، مثل التالي:
- تجاوز تكديس المخزن المؤقت
- فيضانات المخزن المؤقت لأجزاء من الذاكرة
- استخدام التكديس خارج نطاقه
- أخطاء خالية من المزدوجة وخالية من الأخطاء
- استخدام التكديس بعد الإرجاع (HWASan فقط)
لا ننصح بتفعيل HWASan أو ASan إلا عند تصحيح مشكلة أو في مرحلة الاختبار الآلي. وفي حين أن هذه الأدوات فعالة، فإن استخدامها فرض عقوبة.
سلوك بيئة التشغيل
عند التفعيل، يتحقق كل من HWASan وASan تلقائيًا من تلف الذاكرة وقت تشغيل التطبيق بالكامل
إذا تم رصد خطأ في الذاكرة، يتعطّل التطبيق مع عرض رسالة SIGBART
(يتم إلغاء الإشارة).
ويطبع رسالة مفصلة إلى Logcat. هناك نسخة من الرسالة
تمت كتابته أيضًا إلى ملف ضمن /data/tombstones
.
تبدو رسالة الخطأ مشابهة لما يلي:
ERROR: HWAddressSanitizer: tag-mismatch on address 0x0042a0826510 at pc 0x007b24d90a0c
WRITE of size 1 at 0x0042a0826510 tags: 32/3d (ptr/mem) in thread T0
#0 0x7b24d90a08 (/data/app/com.example.hellohwasan-eRpO2UhYylZaW0P_E0z7vA==/lib/arm64/libnative-lib.so+0x2a08)
#1 0x7b8f1e4ccc (/apex/com.android.art/lib64/libart.so+0x198ccc)
#2 0x7b8f1db364 (/apex/com.android.art/lib64/libart.so+0x18f364)
#3 0x7b8f2ad8d4 (/apex/com.android.art/lib64/libart.so+0x2618d4)
0x0042a0826510 is located 0 bytes to the right of 16-byte region [0x0042a0826500,0x0042a0826510)
allocated here:
#0 0x7b92a322bc (/apex/com.android.runtime/lib64/bionic/libclang_rt.hwasan-aarch64-android.so+0x212bc)
#1 0x7b24d909e0 (/data/app/com.example.hellohwasan-eRpO2UhYylZaW0P_E0z7vA==/lib/arm64/libnative-lib.so+0x29e0)
#2 0x7b8f1e4ccc (/apex/com.android.art/lib64/libart.so+0x198ccc)
المتطلّبات الأساسية
تثبيت إصدار HWASan من نظام التشغيل Android
لاستخدام HWASan، اتّبِع تعليمات الإعداد في وثائق HWASan لتثبيت إصدار HWASan من نظام التشغيل Android لأجهزة Google أجهزة Pixel
بالنسبة إلى الأجهزة الأخرى، يُرجى التواصل مع الشركة المصنّعة للحصول على إصدار HWASan من نظام التشغيل، إن توفّر، أو استخدِم أداة ASan المخصّصة للبرامج فقط.
استخدام مكتبة C++ القياسية المشتركة في مشروعك
بسبب مشكلة معروفة، لا تتوافق ASan مع معالجة استثناء C++ عند
باستخدام libc++_static
. لا تظهر هذه المشكلة عند استخدام libc++_shared
.
لدى HWASan عاملَي التشغيل new
وdelete
، اللذين لا يمكنهما
استخدامها إذا كانت المكتبة القياسية مرتبطة بشكل ثابت بالمشروع.
لتغيير هذا الإعداد، يمكنك الاطلاع على ربط مكتبة C++ العادية في هذا المستند.
تفعيل إنشاء مؤشر الإطار
يستخدم كل من HWASan وASan أداة إلغاء الالتفاف مستندة إلى مؤشر الإطار السريع لإنشاء تقرير تتبُّع تسلسل استدعاء الدوال البرمجية. معلومات حول تخصيص الذاكرة وأحداث البيع. هذا يعني أنك تفعيل إنشاء مؤشر الإطار في إعدادات برنامج التجميع في C++ لاستخدام هذه الجديدة. وهذا يعني أنّك بحاجة إلى إيقاف ميزة تحسين حذف مؤشر الإطار.
لتغيير هذا الإعداد، راجِع تفعيل مؤشر الإطارات. الإنشاء في هذا المستند.
إعداد مشروع Visual Studio لاستخدام HWASan أو ASan
تفعيل بروتوكول HWASan أو ASan
لتفعيل HWASan أو ASan، انتقِل إلى "خصائص الإعداد" > الإعدادات العامة في صفحات المواقع لمشروعك.
الشكل 1: خيار خصائص المشروع في Visual Studio Solution نافذة المستكشف (Explorer).
الشكل 2: إعداد مصحّح العنوان (ASan) في المشروع العام المواقع.
لتفعيل HWASan لمشروعك، عليك تغيير عامل تطهير العنوان (ASan). الإعداد على تفعيل ASan على الأجهزة (fsanitize=hwaddress)
لتفعيل ميزة ASan لمشروعك، عليك تغيير إعداد Address Sanitizer (ASan). إلى ASan Enabled (fsanitize=address).
تفعيل إنشاء مؤشر الإطار
يتم التحكّم في إنشاء مؤشر الإطار من خلال أداة Omit Frame Pointer C/C++ . إعداد برنامج التجميع ويمكن العثور عليها في صفحات المواقع ضمن مشروعك خصائص الإعداد > C/C++ > التحسين:
الشكل 3: مكان العثور على إعداد حذف مؤشر الإطار
عند استخدام HWASan أو ASan، اضبط إعداد حذف مؤشر الإطار على لا (-fno-omit-frame-pointer).
ربط مكتبة C++ العادية في وضع المكتبة المشتركة
يمكن العثور على إعداد وضع الربط لمكتبة C++ العادية في صفحات الموقع للمشروع ضمن خصائص الإعداد > عام، في قسم الإعدادات التلقائية للمشروع.
الشكل 4: مكان العثور على إعداد وضع الربط لمكتبة C++ العادية.
أثناء استخدام HWASan أو ASan، اضبط استخدام STL من أجل استخدام مكتبات C++ Standard (so.). تربط هذه القيمة لغة C++ مكتبة قياسية في مشروعك باعتبارها مكتبة مشتركة، وهو مطلوب HWASan وASan لتعمل بشكل صحيح.
إنشاء إعدادات إصدار لاستخدام مطهّر العنوان
إذا كنت تفضّل استخدام برنامج HWASan أو ASan مؤقتًا، قد لا تحتاج إلى إنشاء تكوينات إصدار جديد لاستخدامها فقط. قد يكون هذا هو الحال إذا كان مشروعك صغيرًا، أو كنت تستكشف الميزة، أو ردًا على مشكلة اكتشافها أثناء الاختبار.
ومع ذلك، إذا وجدته مفيدًا وتخطط لاستخدامه بانتظام، فيمكنك التفكير إنشاء تهيئة إصدار جديدة لـ HWASan أو ASan كما هو موضح في عيّنة من إبريق الشاي: يمكنك القيام بذلك، إذا، على سبيل المثال، تشغيل مطهّر العنوان بانتظام كجزء من اختبارات الوحدة، أو أثناء إجراء اختبارات الدخان ليلاً للعبتك.
وقد يكون إنشاء تهيئة إصدار منفصل مفيدًا بشكل خاص إذا كان لديك مشروع كبير يستهلك عددًا كبيرًا من مكتبات الجهات الخارجية المختلفة حيث تقوم عادةً بربطها بشكل ثابت بمكتبة C++ القياسية. مخصَّص إنشاء تهيئات يمكن أن يساعد في ضمان بقاء إعدادات مشروعك ودقيقة في جميع الأوقات.
لإنشاء إعداد تصميم، من صفحات المواقع لمشروعك، انقر على
الـ
مدير الإعداد...، ثم افتح
القائمة المنسدلة ضبط الحل النشط. بعد ذلك، حدِّد