
Memoro: مُحلّل تفصيلي للكومة
ميمورو هو أداة تحليل تفصيلية عالية الدقة للكومة (heap).
لا يُظهر لك ميمورو أين ومتى يقوم برنامجك بتخصيص الذاكرة من الكومة فحسب، بل يظهر لك كيف استخدم برنامجك تلك الذاكرة بالفعل.
يجمع ميمورو معلومات مفصلة عن الوصول إلى الكومة، بما في ذلك القراءة والكتابة إلى الذاكرة وموعد حدوثها، ليعطيك فكرة عن مدى كفاءة استخدام برنامجك لذاكرة الكومة.
يتضمن ميمورو تطبيقًا مرئيًا يقوم بتقطير كل هذه المعلومات إلى درجات ومؤشرات لمساعدتك في تحديد مناطق المشاكل.

للحصول على معلومات أكثر تفصيلاً حول كيفية عمل ميمورو، انظر هنا
الخطوات التالية توضح دليل البدء السريع لاستخدام ميمورو. للحصول على تعليمات إعداد تفصيلية، راجع هنا. للحصول على دليل حول استخدام ميمورو، راجع هنا.
أولاً، ستحتاج إلى بناء نسخة محلية من LLVM/Clang لتتمكن من تجميع الكود الخاص بك مع أداة ميمورو. الإصدارات المُجمّعة مسبقًا غير متوفرة بعد، ولكن إذا طلب مني عدد كافٍ من الأشخاص، ربما سأستضيفها هنا.
اتبع تعليمات بناء LLVM/Clang هنا، ولكن استخدم المستودعات المحددة المدرجة أدناه. ميمورو ليس بعد في فرع التطوير (dev branch) لـ LLVM/Clang.
يُوصى باستخدام مستودعات مرآة git بدلاً من SVN. بالنسبة لمستودع LLVM الرئيسي، ومستودع Clang، ومستودع CompilerRT، استخدم إصدارات ميمورو:
يجب أن تكون هذه المستودعات افتراضيًا على الفرع memoro_80.
استنسخ هذا المستودع باستخدام git clone [email protected]:epfl-vlsc/memoro.git
ادخل إلى الدليل.
$ cd memoro
قم بتشغيل npm install للتأكد من وجود جميع تبعيات JavaScript.
ثم ستحتاج إلى بناء الإضافة (addon) الخاصة بمعالجة البيانات بلغة C++.
للقيام بذلك، قد تحتاج أولاً إلى تثبيت node-gyp (npm install -g node-gyp)
ثم،
cd cpp
node-gyp build --release --target=1.7.9 --arch=x64 --dist-url=https://atom.io/download/electron
cd ..
target هو إصدار Electron الذي يجب أن يتطابق مع الإصدار المستخدم لتشغيل التطبيق الرئيسي.
قم بضبط هذا إذا لزم الأمر.
قم أيضًا بضبط arch إذا لزم الأمر، لكني لم أختبر بعد على أنظمة x64 غير *nix.
يوجد أيضًا ملف Makefile يجب أن يعمل لمعظم المستخدمين.
من الواضح أنك ستحتاج إلى تثبيت مترجم C++ لاستخدام node-gyp.
أولاً، قم ببناء البرنامج الذي ترغب في تحليله باستخدام LLVM/Clang الذي قمت ببنائه سابقًا.
أضف علامة المترجم -fsanitize=memoro لإضافة التجهيز بالأدوات، واختياريًا -fno-omit-frame-pointer للحصول على تتبعات مكدس (stack traces) جيدة.
إذا كانت لديك خطوة ربط (linking) منفصلة، فقد تحتاج أيضًا إلى -fsanitize=memoro لضمان ربط بيئة تشغيل Memoro/Sanitizer.
يُوصى باستخدام محلل الرموز LLVM (symbolizer) لتتبعات المكدس، قم بتعيين متغير البيئة MEMORO_SYMBOLIZER_PATH للإشارة إلى مكان وجود llvm-symbolizer.
أو فقط ضعه في PATH الخاص بك.
قم بتشغيل برنامجك. بعد الانتهاء، ستنشئ بيئة تشغيل ميمورو ملفين، *.trace و *.chunks. يمكن فتح هذه الملفات وعرضها باستخدام التطبيق المرئي.
بعد بناء إضافة C++، يمكن تشغيل التطبيق مباشرة من دليل المستودع
electron .
ملف->فتح أو Cmd/Ctrl-O للفتح، انتقل إلى وحدد ملف التتبع أو ملف القطع.
صيد سعيد لمشاكل الكومة :-)
استخدم electron-packager لجمع وتصدير جميع الأكواد والموارد إلى حزمة تطبيق.
electron-packager . --overwrite --platform=<platform> --arch=x64 --electron-version=1.7.9 --icon=assets/icons/icon64.icns --prune=true --out=release-builds
مرة أخرى، قم بضبط platform و arch وإصدار electron إذا لزم الأمر.
المساهمات مرحب بها جدًا. يرجى تقديم طلب سحب (pull request) أو التواصل.