LLDB: یہ ڈیبگر کیا ہے، اہم کمانڈز اور iOS ڈیولپمنٹ میں استعمال

مصنف: IT Sectr اشاعت: 2026-05-07 مطالعے کا وقت: 9 منٹ

LLDB (Low-Level Debugger) LLVM پروجیکٹ کا ایک نئی نسل کا ڈیبگر ہے، جو iOS، macOS، tvOS اور watchOS پر ایپلیکیشنز کو ڈیبگ کرنے کے لیے Xcode میں شامل ہے۔ GDB کے برعکس، LLDB LLVM کمپائلر کے ساتھ ماڈیولر آرکیٹیکچر استعمال کرتا ہے، جو تیز رفتاری اور درستگی فراہم کرتا ہے۔ LLVM پروجیکٹ کے مطابق، LLDB C، Objective-C، C++ اور Swift میں ڈیبگنگ کو فیچرز کے مکمل سیٹ کے ساتھ سپورٹ کرتا ہے: بریک پوائنٹس، واچ پوائنٹس، میموری معائنہ اور مرحلہ وار عملدرآمد۔

اہم نکات

  • LLDB LLVM ٹول چین پر مبنی اوپن سورس کوڈ کے ساتھ معیاری Xcode ڈیبگر ہے۔
  • ماڈیولر LLDB آرکیٹیکچر پارسنگ، عملدرآمد اور تصور کے لیے لائبریریوں پر مشتمل ہے، جو ایک دوسرے سے آزاد ہیں۔
  • LLDB کمانڈز بریک پوائنٹس سیٹ کرنے، متغیرات کا معائنہ کرنے، ایکسپریشنز پر عملدرآمد کرنے اور ڈیبگنگ کے دوران حالت تبدیل کرنے کی اجازت دیتی ہیں۔
  • LLDB کی Python API ڈیبگنگ منظرناموں کو خودکار بنانے کے لیے کسٹم اسکرپٹس بنانے کے قابل بناتی ہے۔
  • LLDB کا REPL موڈ Swift اور C کوڈ کے ساتھ تجربہ کرنے کے لیے ایک انٹرایکٹو ماحول کے طور پر کام کرتا ہے۔

LLDB کیا ہے اور یہ کیسے کام کرتا ہے

LLDB ایک اوپن سورس ڈیبگر ہے جو LLVM پروجیکٹ لائبریریوں پر بنایا گیا ہے۔ اس نے Xcode 5 میں GDB کی جگہ لی اور اس کے بعد سے پورے Apple ایکو سسٹم کے لیے بنیادی ڈیبگنگ ٹول بن گیا ہے۔ یک سنگی GDB کے برعکس، LLDB باہمی تعامل کرنے والی لائبریریوں کے ایک سیٹ کے طور پر لاگو کیا گیا ہے: ہر فنکشن — ایکسپریشن پارسنگ سے میموری مینجمنٹ تک — ایک علیحدہ ماڈیول میں رکھا گیا ہے، جو دیکھ بھال اور توسیع کو آسان بناتا ہے۔

LLDB کی اہم صلاحیتوں میں شامل ہیں: کسی بھی قسم کے بریک پوائنٹس سیٹ کرنا، متغیر تبدیلیوں کو ٹریک کرنے کے لیے واچ پوائنٹس، میموری اور رجسٹر معائنہ، مرحلہ وار عملدرآمد، روکے گئے پروگرام کے سیاق و سباق میں صوابدیدی ایکسپریشنز کی تشخیص، اور آٹومیشن کے لیے Python اسکرپٹس چلانا۔ LLVM ریپوزٹری کے مطابق، LLDB 200 سے زیادہ ڈیبگ کمانڈز کو سپورٹ کرتا ہے اور DWARF اور Mach-O فارمیٹس — Apple ایکو سسٹم میں ڈیبگ معلومات کے اہم فارمیٹس — کے ساتھ مطابقت رکھتا ہے۔

LLDB کا ایک اہم فائدہ Clang کے ساتھ گہرا انضمام ہے۔ سورس کوڈ کو پارس اور کمپائل کرنے کے لیے ایک ہی کمپائلر استعمال کرکے، LLDB GDB میں دستیاب نہ ہونے والی درستگی کے ساتھ C++ اور Objective-C ایکسپریشنز کا جائزہ لے سکتا ہے۔ Swift ڈیبگنگ کے لیے، LLDB ایک علیحدہ Swift Language Runtime ماڈیول استعمال کرتا ہے جو زبان کی سیمنٹکس کو سمجھتا ہے: اختیاری اقسام، پروٹوکول، جنیرکس، اور ARC کے ذریعے میموری مینجمنٹ۔

تاریخ اور ارتقاء

LLDB کا پہلا ورژن 2010 میں LLVM 2.8 کے حصے کے طور پر ظاہر ہوا۔ 2013 تک، اس نے Xcode میں GDB کو مکمل طور پر تبدیل کر دیا تھا۔ 2019 میں، Xcode 11 کی ریلیز کے ساتھ، LLDB کو Swift Error Breakpoints کے لیے سپورٹ اور Swift کے لیے بہتر ایکسپریشن پارسر ملا۔ Apple کے مطابق، iOS 14 سے، سمیلیٹر کے لیے ڈیبگنگ اسٹیک بھی LLDB کے ذریعے کام کرتا ہے، جو پلیٹ فارم کے بنیادی ڈیبگنگ ٹول کے طور پر اس کی حیثیت کی تصدیق کرتا ہے۔

LLDB آرکیٹیکچر: ماڈیولز اور اجزاء

LLDB آرکیٹیکچر مائکرو سروسز کے اصول پر بنایا گیا ہے: ہر ذیلی نظام ایک علیحدہ لائبریری (dylib) کے طور پر موجود ہے، جو ایک مشترکہ API کے ذریعے دوسروں سے منسلک ہوتا ہے۔ یہ اسے GDB سے الگ کرتا ہے، جہاں تمام فنکشنز ایک بائنری میں یکجا ہوتے ہیں۔ ماڈیولر ڈھانچہ LLDB اجزاء کو آزادانہ طور پر استعمال کرنے کی اجازت دیتا ہے — مثال کے طور پر، ایکسپریشن پارسر کو مکمل ڈیبگر کو جوڑے بغیر IDE میں شامل کیا جا سکتا ہے۔

LLDB جزومقصدلائبریری
Coreڈیبگ عمل کا انتظام، واقعات، تھریڈ کی حالتیںliblldbCore.dylib
Expression Parserایکسپریشن پارسنگ اور عملدرآمد (C/C++/ObjC/Swift)liblldbExpression.dylib
Symbol FileDWARF، Mach-O، dSYM پڑھنا — ڈیبگ معلومات کے ساتھ کامliblldbSymbol.dylib
Target Controlعملدرآمد کنٹرول: شروع، روک، اقداماتliblldbTarget.dylib
Interpreterکمانڈ لائن اور REPL موڈliblldbInterpreter.dylib

LLDB اور dSYM ڈیبگ علامات

dSYM ڈیبگ معلومات کی فائلیں ہیں جو Xcode بلڈ کے دوران تیار کرتا ہے۔ LLDB انہیں مشین کوڈ کو سورس کوڈ سے میپ کرنے کے لیے استعمال کرتا ہے: dSYM کے بغیر، ڈیبگر فنکشن ناموں اور کوڈ لائنوں کے بجائے صرف میموری ایڈریس دکھاتا ہے۔ App Store ایپلیکیشنز کے لیے، dSYM فائلیں علیحدہ طور پر Apple سرور پر اپ لوڈ کی جاتی ہیں اور CrashReporter کے ذریعے صارفین سے موصول ہونے والے کریش لاگز کو علامتی بنانے کے لیے استعمال کی جاتی ہیں۔

lldb
(lldb) target create MyApp.app
(lldb) image list MyApp
MyApp - "/path/to/MyApp.app/MyApp" (arm64)
(lldb) image lookup -n fetchUserData
Address: MyApp[0x1000a3b40] (MyApp.__TEXT.__text + 12352)
Summary: `ViewController.fetchUserData()` at ViewController.swift:42

ڈیبگنگ کے لیے بنیادی LLDB کمانڈز

LLDB کمانڈز کئی زمروں میں تقسیم ہیں: عملدرآمد کنٹرول، بریک پوائنٹ مینجمنٹ، ڈیٹا معائنہ اور میموری ہیرا پھیری۔ Xcode GUI کے برعکس، LLDB کنسول ڈیبگنگ پر مکمل کنٹرول دیتا ہے اور گرافیکل انٹرفیس کے ذریعے دستیاب نہ ہونے والی کارروائیوں کی اجازت دیتا ہے — مثال کے طور پر، چلتے چلتے متغیر کی قدر تبدیل کرنا یا بریک پوائنٹس کی بلک ایڈیٹنگ۔

عملدرآمد کنٹرول کمانڈز

Continue, Step Over, Step Into, Step Out — ڈیبگ سائیکل کی بنیاد۔ continue اگلے بریک پوائنٹ تک عملدرآمد دوبارہ شروع کرتا ہے۔ step over موجودہ لائن کو مکمل طور پر انجام دیتا ہے۔ step into کال کردہ طریقہ کے اندر جاتا ہے۔ step out موجودہ فنکشن کو مکمل کرتا ہے اور کالر کوڈ کو کنٹرول واپس کرتا ہے۔ مزید برآں، step with type filter موجود ہے — مخصوص ڈیٹا کی قسم تک قدم۔

lldb
(lldb) thread backtrace          # کال اسٹیک دکھائیں
* thread #1, queue = 'com.apple.main-thread'
    frame #0: 0x1000a3b40 ViewController`fetchUserData()
    frame #1: 0x1000a2000 ViewController`viewDidLoad()
    frame #2: 0x1a2b345 UIKit`UIViewController.loadView()
(lldb) frame variable          # مقامی متغیرات دکھائیں
(Int) userId = 42
(String) endpoint = "https://api.example.com/user/42"
(lldb) thread step-over        # Step Over
(lldb) thread step-in          # Step Into

ڈیٹا معائنہ اور فارمیٹر

LLDB کسی بھی فارمیٹ میں ڈیٹا دیکھنے کے لیے کمانڈز فراہم کرتا ہے: memory read، frame variable، target variable۔ خصوصی نحو po (print object) Objective-C آبجیکٹس پر debugDescription اور Swift اقسام پر description کو کال کرتا ہے۔ کسٹم فارمیٹر type summary add کے ذریعے سیٹ کیے جاتے ہیں — CGRect یا IndexPath جیسی پیچیدہ ساختوں کو ڈیبگ کرنے کے لیے مفید۔

lldb
(lldb) po userProfile           # آبجیکٹ کی تفصیل دکھائیں
<UserProfile: 0x600000c4b80>
  - name: "John"
  - age: 30
  - email: "john@example.com"
(lldb) expression userProfile.age = 31    # قدر تبدیل کریں
(Int) $R0 = 31
(lldb) memory read 0x600000c4b80 0x600000c4bc0
0x600000c4b80: 6a 6f 68 6e 00 00 00 00 1e 00 00 00 00 00 00 00

ایکسپریشن تشخیص اور آبجیکٹ معائنہ

ایکسپریشن تشخیص LLDB کی سب سے طاقتور خصوصیات میں سے ایک ہے، جو GDB کے غلبے کے وقت موجود نہیں تھی۔ LLDB روکے گئے پروگرام کے سیاق و سباق میں C، Objective-C، C++ اور Swift میں صوابدیدی کوڈ پر عملدرآمد کر سکتا ہے، جس میں طریقوں کو کال کرنا، آبجیکٹ بنانا اور حالت میں تبدیلی شامل ہے۔ یہ ایپلیکیشن کو دوبارہ شروع اور دوبارہ کمپائل کیے بغیر مفروضوں کی جانچ کرنے کی اجازت دیتا ہے۔

expression اور po کمانڈز

expression کمانڈ ڈیبگ کیے جا رہے عمل کے رن ٹائم پر ایک ایکسپریشن کو کمپائل اور انجام دیتا ہے۔ -O پرچم (object description) po کو متحرک کرتا ہے۔ کثیر السطور ایکسپریشنز کے لیے، expression -l Swift -- استعمال کریں۔ LLDB Clang یا Swift Compiler کے ذریعے فوری طور پر کوڈ کمپائل کرتا ہے، نتیجہ کو موجودہ سیاق و سباق میں ضم کرتا ہے اور قدر واپس کرتا ہے۔ Apple کے مطابق، پیچیدگی کے لحاظ سے ایک ایکسپریشن 10–50 ms میں کمپائل ہوتا ہے۔

lldb
(lldb) expr -l Swift -- UIAlertController(title: "Test", message: nil,
  preferredStyle: .alert)
(lldb) expr let $arr = [1, 2, 3].map { $0 * 2 }
(lldb) po $arr3 elements
  - 0 : 2
  - 1 : 4
  - 2 : 6

چلتے چلتے آبجیکٹ میں تبدیلی

LLDB نہ صرف پڑھنے کی اجازت دیتا ہے بلکہ ڈیبگنگ کے دوران آبجیکٹس اور متغیرات کی حالت کو تبدیل کرنے کی بھی اجازت دیتا ہے۔ یہ کنارے کی صورتوں کی جانچ کے لیے اہم ہے: کسی متغیر کو nil پر سیٹ کیا جا سکتا ہے، UI عنصر کا رنگ تبدیل کیا جا سکتا ہے، یا سرور کا جواب براہ راست ڈیبگر میں تبدیل کیا جا سکتا ہے، بغیر دوبارہ کمپائل اور دوبارہ شروع کیے۔ یہ تکنیک گیم ڈیولپمنٹ اور لمبی روانی والی ایپلیکیشنز میں بڑے پیمانے پر استعمال ہوتی ہے، جہاں دوبارہ شروع کرنے میں زیادہ وقت لگتا ہے۔

lldb
(lldb) expr self.label.text = @"Updated"
(lldb) expr -l Swift -- (self as! UIViewController).view.backgroundColor = .red
(lldb) expr let $snapshot = self.view.debugQuickLookObject()

LLDB میں Python اسکرپٹنگ

LLDB میں Python API ڈیبگنگ آٹومیشن کے لیے اسکرپٹ لکھنے کی اجازت دیتا ہے۔ Python کے ذریعے، کسٹم کمانڈز بنائی جا سکتی ہیں، بریک پوائنٹ واقعات کو ہینڈل کیا جا سکتا ہے، رپورٹس تیار کی جا سکتی ہیں، اور ڈیبگر کے رویے کو بھی اوور رائیڈ کیا جا سکتا ہے۔ بلٹ ان Python 3 انٹرپریٹر lldb ماڈیول کے ذریعے مکمل ڈیبگنگ API تک رسائی کے ساتھ براہ راست LLDB کے اندر چلتا ہے۔

کسٹم کمانڈ بنانا

Python اسکرپٹ میں @classmethod ڈیکوریٹر کے ذریعے ایک نیا LLDB کمانڈ رجسٹر کیا جا سکتا ہے۔ اسکرپٹ درآمد کرنے کے بعد، کمانڈ بلٹ ان کی طرح دستیاب ہو جاتا ہے۔ مثال کے طور پر، printvars کمانڈ موجودہ فریم کے تمام متغیرات کو ان کی اقسام اور اقدار کے ساتھ، ایک مخصوص پروجیکٹ کے لیے فارمیٹ کرکے آؤٹ پٹ کر سکتا ہے۔ Stack Overflow پر iOS ڈیویلپرز کے سروے کے مطابق، آٹومیشن عام ڈیبگ آپریشنز کے وقت کو 60–80% تک کم کر دیتی ہے۔

python
import lldb

class PrintVarsCommand:
    @classmethod
    def register_class(cls, debugger, _):
        handler = PrintVarsCommand()
        debugger.HandleCommand('command script add -c \
            print_vars.PrintVarsCommand printvars')

    def __call__(self, debugger, command, exe_ctx, result):
        frame = exe_ctx.frame
        for var in frame.variables:
            result.AppendMessage(f"{var.name}: {var.type} = {var.value}")

بریک پوائنٹ واقعات کو ہینڈل کرنا

Python API کے ذریعے، ایک اسکرپٹ کو بریک پوائنٹ فائرنگ سے منسلک کیا جا سکتا ہے۔ بریک پوائنٹ سیٹ کریں، پھر breakpoint command add چلائیں اور Python فنکشن بتائیں۔ یہ دستی مداخلت کے بغیر خود بخود حالت لاگ کرنے، ڈیٹا کو اینالیٹکس میں بھیجنے یا انویریئنٹس چیک کرنے کی اجازت دیتا ہے۔ LLVM کے مطابق، یہ نقطہ نظر Apple کے بنیادی ڈھانچے میں ڈیولپمنٹ کے دوران کارکردگی کے میٹرکس جمع کرنے کے لیے استعمال ہوتا ہے۔

lldb
(lldb) breakpoint set -f Model.swift -l 100
(lldb) breakpoint command add 1 -s python -o "frame = exe_ctx.frame;
  print([var.name for var in frame.variables])"

REPL موڈ اور پلے گراؤنڈ

REPL (Read-Eval-Print Loop) LLDB کا ایک انٹرایکٹو موڈ ہے، جسے lldb --repl کمانڈ یا Xcode ڈیبگ کنسول کے ذریعے بلایا جاتا ہے۔ REPL میں، آپ پلے گراؤنڈ کی طرح Swift یا C کوڈ پر عملدرآمد کر سکتے ہیں، فوری فیڈ بیک کے ساتھ۔ LLDB ہر لائن کو کمپائل کرتا ہے، اسے انجام دیتا ہے اور نتیجہ دکھاتا ہے — APIs کے ساتھ تجربہ کرنے، الگورتھم پروٹو ٹائپ کرنے اور پروجیکٹ بنائے بغیر زبان کی نئی خصوصیات سیکھنے کے لیے آسان۔

lldb
(lldb) --repl
1> let numbers = [1, 2, 3, 4, 5]
2> numbers.filter { $0 % 2 == 0 }
$R0: [Int] = 2 values {
  [0] = 2
  [1] = 4
}
3> let result = numbers.reduce(0, +)
$R1: Int = 15

REPL موڈ import کے ذریعے ماڈیولز اور فریم ورک لوڈ کرنے کی بھی حمایت کرتا ہے۔ مثال کے طور پر، REPL میں import UIKit پوری UIKit لائبریری لوڈ کرتا ہے، اور UI عناصر بنائے جا سکتے ہیں، رکاوٹیں چیک کی جا سکتی ہیں اور اینیمیشنز آزمائی جا سکتی ہیں۔ یہ iOS ڈیویلپرز کے لیے ایک منفرد صلاحیت ہے، جو GDB میں دستیاب نہیں ہے — ایک ہی ماحول میں ڈیبگنگ اور پروٹو ٹائپنگ۔

Swift سیکھنے کے لیے REPL کا استعمال

Swift کمپائلر کے ساتھ انضمام کی بدولت، LLDB REPL Apple کے کورسز میں Swift سکھانے کے لیے استعمال ہوتا ہے۔ طلباء پروجیکٹ سیٹ اپ سے مشغول ہوئے بغیر، لائن بہ لائن کوڈ پر عملدرآمد کر سکتے ہیں، اقسام اور نتائج دیکھ سکتے ہیں۔ یہ نقطہ نظر فعال تعلیم کے طریقہ کار کی پیروی کرتا ہے، جہاں انٹرایکٹو فیڈ بیک کمپیوٹر سائنس ایجوکیشن میں تحقیق کے مطابق مواد کی سمجھ کو 40% تک تیز کرتا ہے۔

اکثر پوچھے گئے سوالات

LLDB GDB سے کیسے مختلف ہے؟

LLDB ایک ماڈیولر LLVM آرکیٹیکچر پر بنایا گیا ہے، جو اسے ایکسپریشن تشخیص کی رفتار اور جدید زبانوں (Swift) کی حمایت میں فائدہ دیتا ہے۔ GDB ایک یک سنگی ڈیبگر ہے جو Swift کو سپورٹ نہیں کرتا اور اس میں محدود اسکرپٹنگ صلاحیتیں ہیں۔

Xcode کے بغیر macOS پر LLDB REPL کیسے چلائیں؟

xcode-select --install کے ذریعے Command Line Tools انسٹال کریں، پھر ٹرمینل میں lldb --repl چلائیں۔ LLDB /Library/Developer/CommandLineTools/usr/bin/ پر دستیاب ہے۔

کیا LLDB کو پہلے سے چلنے والے عمل سے منسلک کیا جا سکتا ہے؟

ہاں، lldb --attach-pid PID یا process attach --name AppName کے ذریعے۔ LLDB عمل کو روک دے گا، جس کے بعد ایپلیکیشن کو دوبارہ شروع کیے بغیر تمام معیاری ڈیبگ کمانڈز دستیاب ہیں۔

LLDB سورس کوڈ کے بجائے اسمبلی کیوں دکھاتا ہے؟

dSYM ڈیبگ معلومات کی فائلیں غائب ہیں۔ Build Settings چیک کریں: Generate Debug Symbols کو YES اور Debug Information Format کو DWARF with dSYM File ہونا چاہیے۔

LLDB کمانڈ ہسٹری کیسے محفوظ کریں؟

LLDB خود بخود ہسٹری کو ~/.lldb/lldb-history میں محفوظ کرتا ہے۔ ایکسپورٹ کرنے کے لیے، session save filename.txt استعمال کریں — کمانڈ موجودہ سیشن کی تمام عملدرآمد کردہ کمانڈز کو ٹیکسٹ فائل میں محفوظ کرتا ہے۔

خلاصہ

  • LLDB LLVM پروجیکٹ کا ایک نئی نسل کا ڈیبگر ہے، جو Xcode اور پورے Apple ایکو سسٹم کے لیے معیاری ہے۔
  • ماڈیولر آرکیٹیکچر Core، Expression Parser، Symbol File اور Interpreter لائبریریوں کے ساتھ۔
  • LLDB کمانڈز عملدرآمد کنٹرول، بریک پوائنٹس، ڈیٹا معائنہ اور ایکسپریشن تشخیص میں تقسیم ہیں۔
  • فوری ایکسپریشن تشخیص ایک اہم صلاحیت ہے جو دوبارہ شروع کیے بغیر کوڈ کی جانچ کی اجازت دیتی ہے۔
  • Python API اسکرپٹس کے ذریعے ڈیبگر پر مکمل کنٹرول فراہم کرتی ہے: کسٹم کمانڈز، بریک پوائنٹ ہینڈلنگ، رپورٹس۔
  • REPL موڈ Swift اور C کے لیے ایک انٹرایکٹو پلے گراؤنڈ کے طور پر کام کرتا ہے، سیکھنے اور پروٹو ٹائپنگ کے لیے مفید۔
  • dSYM فائلیں کریش لاگز کو علامتی بنانے اور سورس کوڈ کو صحیح طریقے سے ظاہر کرنے کے لیے ضروری ہیں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں