xcode - GDB Vs LLDB debuggers




debugging cocoa-touch (2)

ما الفرق بين مصححتي أخطاء GDB و LLDB؟ قمت مؤخرًا بترقية الإصدار Xcode من 4.2 إلى 4.3 وبدأت في الحصول على تحذير لترقية مصحح الأخطاء من GDB إلى LLDB.


تعد LLDB جزءًا من مجموعة أدوات LLVM التي تنتقل إليها Apple ، بما في ذلك Clang. هناك الكثير من الميزات المحسّنة ، بما في ذلك تحسين الأداء. هناك مقدمة سريعة لمستخدمي GDB هنا: http://lldb.llvm.org/tutorial.html

ومع ذلك...

قد ترغب في القيام برحلة إلى المنتديات على developer.apple.com. هناك القليل من الهادر حول المشكلات مع LLDB في الوقت الحالي (في XCode 4.3.1). مشكلة واحدة سيئة ، والتي أكدها أشخاص من Apple ، هي أن مشاهدة ivars أثناء التنقل قد تظهر لك قيم خاطئة.


1. حسب اختلاف التعريف

أولا ، ما هو GDB؟

"GDB هو المصحح القياسي لنظام برمجيات غنو"
المصحح جنو ، الذي يسمى عادة GDB والمسمى gdb كملف قابل للتنفيذ ، هو المصحح القياسي لنظام التشغيل GNU. ومع ذلك ، لا يقتصر استخدامه على نظام التشغيل غنو ؛ وهو مصحح محمول يعمل على العديد من أنظمة يونكس الشبيهة ويعمل في العديد من لغات البرمجة ، بما في ذلك Ada و C و C ++ و Objective-C و Free Pascal و Fortran و Java 1 وغيرها جزئياً. 2

(اقتباس من ويكيبيديا)

ثانيًا ، ما هو LLDB؟

"LLDB عبارة عن مصحح تم إنشاؤه كمجموعة من المكونات القابلة لإعادة الاستخدام والتي تستفيد بشكل كبير من المكتبات الموجودة في مشروع LLVM الأكبر ، مثل محلل التعبير Clang ومفكك LLVM.
إن LLDB هو بديل Apple "من الألف إلى الياء" لـ GDB ، تم تطويره بالتنسيق الوثيق مع برامج التحويل LLVM ليوفر لك أحدث ما توصل إليه التصحيح مع قدرات واسعة في التحكم في التدفق وفحص البيانات. بدءًا من Xcode 5 ، تتم إعادة تهيئة جميع مشاريع التطوير الجديدة والتي سبق تطويرها تلقائيًا لاستخدام LLDB. يوفر لك التثبيت القياسي LLDB مجموعة كبيرة من الأوامر المصممة لتكون متوافقة مع أوامر GDB المألوفة. بالإضافة إلى استخدام التكوين القياسي ، يمكنك بسهولة تخصيص LLDB لتناسب احتياجاتك.

(اقتباس من موقع أبل الرسمي)
/ * حاولت العثور على datas الفعلي / العملي لإثبات العبارة: LLDB بالفعل أسرع بكثير من GDB عند تصحيح البرامج الكبيرة.) ومع ذلك ، لم أتمكن من العثور عليه. إذا كان هناك شخص لديه هذه البيانات ذات الصلة ، يرجى تحرير هذه المقالة. * /

كل من GDB و LLDB بالطبع مصححات ممتازة دون أدنى شك.
GDB هو جزء مصحح من مشروع جنو الذي تم إنشاؤه للعمل على طول مترجم جنو.
LLDB هو جزء مصحح الأخطاء من مشروع LLVM الذي تم إنشاؤه للعمل على طول مترجم LLVM.

2. عن طريق استخدام الفرق من الأوامر

غالبية الأوامر هي نفسها.
ومع ذلك ، يتم تطوير lldb و gdb اثنين من debuggers مختلفة من قبل مجموعة مختلفة من المطورين ومن ثم يكون لديك أوامر مختلفة قليلاً.

هذا هو ارتباط جيد أدناه لمقارنة الفرق بين هذه الأمرين debugger.
اسمح لي بربط التفاصيل أدناه: https://developer.apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-command-examples.html

http://lldb.llvm.org/lldb-gdb.html

هذا يشير بوضوح وينظم اختلاف الأوامر.

في حالة عدم إمكانية الوصول إلى الموقع بعد الآن ، أقوم بتلخيص الاختلاف الرئيسي للأوامر أدناه من الموقع المرتبط.



3. من خلال رأي شخصي

تم دمج LLDB بالكامل من Xcode IDE 5 بشكل افتراضي كمصحح أخطاء أولية.
ومنذ ذلك الوقت ، كان هناك بعض تقارير الشكوى حول استقرار LLDB ومشكلات الأداء والبق.
ومع ذلك ، فإن مشروع LLVM مع LLDB تم تحسينه وتحديثه بشكل لا يصدق إلى حد كبير باعتباره مشروعًا أساسيًا مفتوح المصدر في العالم.
لذا ، أعتقد ، على الأقل ، يجب استخدام LLDB لبيئة تطوير Apple نظرًا لأن LLDB سرق موقع GDB وهو مصحح الأخطاء الافتراضي الأساسي على الأقل في Apple world.
(في أواخر شهر سبتمبر 2016 ، تم إصدار Xcode 8 دمج LLVM و LLDB رسميًا ، وهذا يعني أنه قد تم تجاوز الكثير من الوقت لأن LLVM / LLDB هي سلسلة أدوات افتراضية لـ Xcode.)
لكننا جميعًا نعلم أن GDB تم التحقق منه تاريخياً وبقوة وأن مصحح الأخطاء أثبت نجاحه على مدار 30 عامًا ، وهو أمر رائع.

لذا ، أود أن أقول ...
أود استخدام lldb أثناء استخدام clang ، استخدم gdb أثناء استخدام مترجم gcc كتركيبة جيدة أو زوج لأن lldb يعتمد على llvm ، بينما gdb هو مصحح GNU.

أتمنى أن يكون مفيدًا لك.

شكر.







lldb