Watchpoint — یہ کیا ہے، Xcode میں مشاہدہ پوائنٹس کی اقسام اور ترتیب

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

Watchpoint (مشاہدہ پوائنٹ) — ڈیبگنگ کا ایک طریقہ کار جو پروگرام کے عمل کو روکتا ہے جب مخصوص متغیر یا میموری علاقے کی قدر تبدیل ہوتی ہے۔ بریک پوائنٹ کے برعکس، جو کوڈ کی ایک لائن سے منسلک ہوتا ہے، watchpoint ڈیٹا کی تبدیلیوں کو ٹریک کرتا ہے چاہے پروگرام کے کس حصے میں تبدیلی واقع ہو۔ Apple Developer Documentation کے مطابق، watchpoints ڈیٹا ریس، غیر متوقع خصوصیات کی تبدیلیوں اور آبجیکٹ لائف سائیکل ٹریکنگ کے ڈیبگنگ کے لیے ناگزیر ہیں۔

اہم نکات

  • Watchpoint — متغیر کی تبدیلیوں کی نگرانی کرنے والا پوائنٹ، مخصوص میموری علاقے میں کسی بھی تحریر پر فعال ہوتا ہے۔
  • Xcode GUI اور LLDB کنسول کے ذریعے watchpoints کو سپورٹ کرتا ہے، بشمول مشروط watchpoints۔
  • آبجیکٹس کی خصوصیات کے متغیرات کو متغیر کے نام کے بجائے میموری ایڈریس کے ساتھ watchpoint کی ضرورت ہوتی ہے۔
  • Watchpoints کے ساتھ کارکردگی ہر تحریر آپریشن کی ہارڈویئر نگرانی کی وجہ سے نمایاں طور پر گر جاتی ہے۔
  • Watchpoints ڈیبگنگ سیشنز کے درمیان محفوظ نہیں رہتے — ہر لانچ کے بعد دوبارہ ترتیب دینے کی ضرورت ہوتی ہے۔

Watchpoint کیا ہے اور کام کرنے کا اصول

Watchpoint — ڈیبگر کا ایک طریقہ کار ہے جو مخصوص میموری ایڈریس پر قدر تبدیل ہونے پر پروگرام کے عمل کو روکتا ہے۔ اگر بریک پوائنٹ کوڈ کی ایک مخصوص لائن تک پہنچنے پر ردعمل ظاہر کرتا ہے، تو watchpoint ایک مخصوص میموری سیل میں تحریر پر ردعمل ظاہر کرتا ہے — چاہے کوڈ کے کس حصے نے تحریر کی ہے۔ یہ اسے غیر متوقع متغیر تبدیلیاں تلاش کرنے میں ناگزیر بناتا ہے، خاص طور پر ملٹی تھریڈڈ ایپلیکیشنز میں۔

کام کرنے کا اصول پروسیسر ہارڈویئر سپورٹ پر مبنی ہے۔ جدید ARM چپس (Apple Silicon، Qualcomm Snapdragon) 4 سے 8 ہارڈویئر watchpoint رجسٹر فراہم کرتی ہیں۔ جب پروسیسر watchpoint سے مماثل ایڈریس پر تحریر کی ہدایت پر عمل کرتا ہے، تو ایک ہارڈویئر انٹرپٹ ہوتا ہے جسے ڈیبگر پکڑ لیتا ہے۔ جب ہارڈویئر رجسٹر ختم ہو جاتے ہیں، LLDB سافٹ ویئر موڈ میں تبدیل ہو جاتا ہے — یہ ہر تحریر کی ہدایت کو قدم بہ قدم چیک کرتا ہے، عمل کو دسیوں گنا سست کر دیتا ہے۔

ARM Architecture Reference Manual کے مطابق، ہارڈویئر watchpoints Data Watchpoint and Trace (DWT) ماڈیول کی سطح پر کام کرتے ہیں اور قابل عمل کوڈ میں تبدیلی کی ضرورت نہیں ہوتی۔ ردعمل کا وقت نینو سیکنڈ میں ہوتا ہے، جو آڈیو یا ویڈیو فریم بفرز جیسے ڈیٹا پروسیسنگ لوپس میں اعلی تعدد والی متغیر تبدیلیوں کو بھی ٹریک کرنے کی اجازت دیتا ہے۔

Watchpoint بریک پوائنٹ سے کب زیادہ مؤثر ہے

Watchpoint اس وقت ناگزیر ہے جب آپ جانتے ہیں کہ کون سا متغیر تبدیل ہو رہا ہے لیکن نہیں جانتے کہ کہاں سے۔ عام منظرنامے: UIView کی frame خصوصیت بغیر کسی واضح وجہ کے تبدیل ہوتی ہے؛ پس منظر کے تھریڈ میں ایک کاؤنٹر غیر متوقع طور پر ری سیٹ ہوتا ہے؛ isLoading فلیگ نیٹ ورک کی درخواست مکمل ہونے سے پہلے تبدیل ہو جاتا ہے۔ ان میں سے ہر صورت میں، ان تمام جگہوں پر بریک پوائنٹس لگانا جہاں تحریر ہو سکتی ہے، غیر عملی ہے۔ Watchpoint ایک ہی کمانڈ سے مسئلہ حل کرتا ہے۔

Watchpoints کی اقسام اور ترتیب دینے کے طریقے

Xcode اور LLDB تین اقسام کے watchpoints کو سپورٹ کرتے ہیں: watchpoint set variable — مقامی متغیر کی نگرانی کے لیے؛ watchpoint set expression — ایک ایسے اظہار کی نگرانی کے لیے جو ایڈریس لوٹاتا ہے؛ watchpoint set — خام میموری ایڈریس کی نگرانی کے لیے۔ ہر قسم کا اپنا اطلاقی علاقہ ہے۔

Watchpoint کی قسمLLDB کمانڈاستعمال
متغیرwatchpoint set variable -w write self.countمقامی اور عالمی متغیرات، ساخت کی خصوصیات
اظہارwatchpoint set expression -w write -- &self->mutex.lockپوائنٹر کے ذریعے ساخت کے فیلڈز، انڈیکس کے ذریعے صف کے عناصر
ایڈریسwatchpoint set -w write 0x600000c4b80پچھلے LLDB آؤٹ پٹ سے مخصوص میموری ایڈریس

Xcode GUI کے ذریعے ترتیب دینا

Xcode میں، آپ ڈیبگ ایریا کے ذریعے watchpoint ترتیب دے سکتے ہیں: بریک پوائنٹ پر رکیں، Variables View پینل میں مطلوبہ متغیر تلاش کریں، دائیں کلک کریں اور Watch Variable منتخب کریں۔ Xcode خود بخود درست متغیر نام اور سیاق و سباق کے ساتھ watchpoint set variable کمانڈ پر عمل کرے گا۔ اس کے بعد، ڈیبگر ہر قدر کی تبدیلی پر رکے گا — کنسول پر سوئچ کیے بغیر فوری ڈیبگنگ کے لیے آسان۔ تاہم، یہ طریقہ صرف اس وقت کام کرتا ہے جب متغیر موجودہ فریم کی حدود میں ہو۔

swift
func processItems(_ items: [String]) {
    var index = 0
    // GUI کے ذریعے index پر watchpoint سیٹ کریں:
    // یہاں رکیں، دائیں کلک کریں → Watch Variable
    for item in items {
        index += 1
        print("آئٹم \(index): \(item)")
    }
}

LLDB کے ذریعے watchpoints کا انتظام

LLDB کنسول سے watchpoints کے انتظام کے لیے کمانڈز کا ایک مکمل سیٹ فراہم کرتا ہے۔ یہ GUI سے زیادہ کنٹرول دیتا ہے: آپ مشاہدہ علاقے کا سائز سیٹ کر سکتے ہیں، ٹریگر کی شرائط مخصوص کر سکتے ہیں، حساب شدہ اظہار سے حاصل کردہ ایڈریس پر watchpoints بنا سکتے ہیں، اور ٹریگر پر خود بخود کارروائیاں انجام دے سکتے ہیں۔ کمانڈ انٹرفیس خاص طور پر پیچیدہ منظرناموں کی ڈیبگنگ میں مفید ہے جہاں مشاہدہ پیرامیٹرز کو تیزی سے تبدیل کرنے کی ضرورت ہوتی ہے۔

بنیادی watchpoint کمانڈز

watchpoint set variable کمانڈ حدود کو مدنظر رکھتے ہوئے متغیر کا نام لیتا ہے: Objective-C self خصوصیات کے لیے self->_property استعمال کریں، Swift کے لیے self.property استعمال کریں۔ -w write پیرامیٹر تحریر کی ٹریکنگ سیٹ کرتا ہے، -w read — پڑھنے کی ٹریکنگ (ایک موڈ جو صرف کچھ آرکیٹیکچرز پر دستیاب ہے)، -s size — علاقے کا سائز بائٹس میں۔ Watchpoint ترتیب دینے کے بعد، آپ watchpoint list کمانڈ سے فہرست دیکھ سکتے ہیں۔

lldb
(lldb) watchpoint set variable -w write -s 8 self.balance
Watchpoint 1: addr = 0x600000c4b80 size = 8 state = enabled  type = w
    watchpoint spec: 'self.balance'
(lldb) watchpoint set expression -w write -- self->items._storage
Watchpoint 2: addr = 0x600003a4c00 size = 8
(lldb) watchpoint list
1: location = 0x600000c4b80, type = write, variable = '_balance'
2: location = 0x600003a4c00, type = write, expression = 'self->items._storage'

مشروط watchpoints

بریک پوائنٹس کی طرح، watchpoints مشروط ٹریگرنگ کو سپورٹ کرتے ہیں۔ -c پیرامیٹر Swift یا Objective-C میں شرط سیٹ کرتا ہے۔ مثال کے طور پر، newValue > 1000 شرط والا watchpoint صرف اس وقت رکے گا جب تحریر کردہ قدر ایک ہزار سے تجاوز کرے۔ یہ لوپس یا سینسرز کی ڈیبگنگ میں اہم ہے جو فی سیکنڈ ہزاروں تبدیلیاں پیدا کرتے ہیں — ورنہ ڈیبگر ہر تبدیلی پر رک جائے گا، کام کو ناممکن بنا دے گا۔

lldb
(lldb) watchpoint set variable -w write self.temperature -c "(int)$newValue > 100"
Watchpoint 3: addr = 0x600000e4a20, condition = '(int)$newValue > 100'
(lldb) watchpoint modify 3 -C "po self.temperature" -G true
// خود بخود قدر لاگ کریں اور عمل جاری رکھیں

آبجیکٹ خصوصیات اور کلیکشنز کے لیے Watchpoints

Objective-C اور Swift آبجیکٹ خصوصیات کے لیے watchpoints کی ایک خاص خصوصیت — watchpoint خصوصیت کے نام پر نہیں بلکہ آبجیکٹ کی میموری میں ivar (مثال متغیر) فیلڈ کے ایڈریس پر سیٹ ہوتا ہے۔ اس کا مطلب ہے کہ ہر نئی آبجیکٹ مختص کرنے پر (مثال کے طور پر، ViewController کو دوبارہ بناتے وقت)، watchpoint غلط ہو جاتا ہے کیونکہ میموری ایڈریس تبدیل ہو گیا ہے۔ ری اسٹارٹس کے درمیان کسی خصوصیت کی مستقل نگرانی کے لیے، آبجیکٹ کی ابتدا کے وقت watchpoint کو دوبارہ ترتیب دینے کی ضرورت ہے۔

کلیکشن عناصر پر Watchpoint

صفوں اور لغتوں کے عناصر کی نگرانی کے لیے ایک مخصوص عنصر کے ایڈریس کا حساب درکار ہے۔ مثال کے طور پر، صف کے تیسرے عنصر کی نگرانی کے لیے watchpoint set expression -- &array[2] استعمال کریں۔ اگر صف اپنے اندرونی بفر کو دوبارہ مختص کرتی ہے (صلاحیت سے زیادہ عناصر شامل کرتے وقت)، watchpoint غلط ہو جاتا ہے — LLDB ایک Watchpoint 1 has an invalid address خرابی رپورٹ کرے گا۔ ان صورتوں میں، کلیکشن کا سائز تبدیل کرنے کے بعد watchpoint کو دوبارہ ترتیب دینے کی ضرورت ہے۔

lldb
(lldb) expr var $arr = [10, 20, 30, 40, 50]
(lldb) watchpoint set expression -w write -- &$arr[2]
Watchpoint 4: addr = 0x1000a4b20, size = 8
(lldb) expr $arr[2] = 99
Watchpoint 4 hit: old value: 30, new value: 99

Watchpoint کے ذریعے retain count کی ٹریکنگ

Objective-C میں، آپ objc_object ساخت میں retainCount فیلڈ پر watchpoint سیٹ کر کے کسی آبجیکٹ کے retain count کو ٹریک کر سکتے ہیں۔ LLDB اسے watchpoint set expression -w write -- (int*)[object retainCount] کے ذریعے کرتا ہے۔ تاہم، ARC (خودکار حوالہ گنتی) والے Swift آبجیکٹس کے لیے، retain count براہ راست قابل رسائی نہیں ہے — اس کے بجائے رساو کے تجزیہ کے لیے Instruments یا Memory Graph Debugger استعمال کریں۔ Apple کے مطابق، retain count پر watchpoints صرف ARC آپٹیمائزیشن غیر فعال ہونے پر Debug بلڈز میں کام کرتے ہیں۔

Watchpoints کی حدود اور کارکردگی

Watchpoints کی کئی اہم حدود ہیں جن پر غور کرنا ضروری ہے۔ اہم — ہارڈویئر watchpoints کی تعداد ARM آرکیٹیکچر پر 4–8 رجسٹرز اور x86 پر 4 تک محدود ہے۔ جب تمام ہارڈویئر رجسٹر مصروف ہوتے ہیں، LLDB سافٹ ویئر watchpoint موڈ میں تبدیل ہو جاتا ہے: یہ ایک استثنا پیدا کرنے کے لیے ٹریک کردہ حد میں ہر تحریر کی ہدایت کو تبدیل کرتا ہے۔ یہ عمل کو 10–50 گنا سست کر دیتا ہے، لہذا عملی طور پر ایک ساتھ 2–3 سے زیادہ فعال watchpoints استعمال نہ کرنے کی سفارش کی جاتی ہے۔

دوسری حد — میموری دوبارہ مختص کرنے پر watchpoints کا غلط ہونا۔ جب کوڑا کرکٹ جمع کرنا یا ARC فعال ہوتا ہے، اور کوئی آبجیکٹ میموری میں منتقل ہوتا ہے (ہیپ کمپیکشن والی زبانوں میں)، watchpoint ایڈریس غلط ہو جاتا ہے۔ Swift اور Objective-C میں، ARC آبجیکٹس کو منتقل نہیں کرتا، لیکن صفوں اور سٹرنگز کی دوبارہ مختص کرنا ایک ہی اثر کا سبب بنتا ہے۔ LLDB اس بارے میں Watchpoint N address (0x...) doesn’t contain a valid allocation پیغام کے ساتھ خبردار کرتا ہے۔

تیسری حد — متغیر کی مرئیت۔ مقامی متغیر پر watchpoint صرف اس وقت کام کرتا ہے جب وہ متغیر موجودہ اسٹیک فریم کی حدود میں ہو۔ فنکشن ختم ہوتے ہی، watchpoint خود بخود ہٹا دیا جاتا ہے۔ عالمی متغیرات یا طویل مدتی آبجیکٹس کے فیلڈز کی نگرانی کے لیے، watchpoint اس وقت تک برقرار رہتا ہے جب تک اسے watchpoint delete کے ذریعے واضح طور پر حذف نہ کیا جائے یا عمل ختم نہ ہو جائے۔

lldb
(lldb) watchpoint delete 1
1 watchpoints deleted.
(lldb) watchpoint delete               # تمام واچ پوائنٹس حذف کریں
2 watchpoints deleted.
(lldb) watchpoint disable 1             # عارضی طور پر غیر فعال کریں
(lldb) watchpoint enable 1              # دوبارہ فعال کریں

ARM کے مطابق، Apple Silicon (M1–M4) پر watchpoints 1 سے 8 بائٹس تک نگرانی علاقے کے سائز کو سپورٹ کرتے ہیں۔ 8 بائٹس سے بڑی ساختوں کی نگرانی کے لیے، ہر فیلڈ پر متعدد watchpoints سیٹ کرنے کی ضرورت ہے۔ یہ پیچیدہ ڈیٹا ساختوں جیسے CGRect (16 بائٹس) یا UIEdgeInsets (16 بائٹس) کی ڈیبگنگ میں اہم ہے۔

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

Watchpoint اور breakpoint میں کیا فرق ہے؟

Breakpoint کوڈ کی ایک لائن سے منسلک ہے — اس لائن پر پہنچنے پر رکتا ہے۔ Watchpoint میموری ایڈریس سے منسلک ہے — پروگرام میں کہیں سے بھی اس ایڈریس پر تحریر ہونے پر رکتا ہے۔ Watchpoint «کون قدر تبدیل کر رہا ہے» ڈھونڈتا ہے، breakpoint «اس لائن پر کیا ہو رہا ہے» ڈھونڈتا ہے۔

ایک ساتھ کتنے watchpoints سیٹ کیے جا سکتے ہیں؟

ARM (Apple Silicon سمیت) پر 4–8 ہارڈویئر watchpoints۔ اس سے تجاوز watchpoint کو سافٹ ویئر موڈ میں تبدیل کر دیتا ہے، عمل کو 10–50 گنا سست کر دیتا ہے۔ ایک وقت میں 2–3 سے زیادہ فعال watchpoints استعمال نہ کرنے کی سفارش کی جاتی ہے۔

ایپلیکیشن دوبارہ شروع کرنے کے بعد watchpoint کام کیوں بند کر دیتا ہے؟

Watchpoints ڈیبگنگ سیشنز کے درمیان محفوظ نہیں رہتے۔ ہر نئے لانچ پر، میموری ایڈریس تبدیل ہو جاتے ہیں اور watchpoint کو دوبارہ ترتیب دینا ضروری ہے۔ استثنا فکسڈ ایڈریس والے عالمی متغیرات پر watchpoints ہیں۔

کیا میں Swift خصوصیت پر watchpoint سیٹ کر سکتا ہوں؟

ہاں، لیکن watchpoint خصوصیت کے ivar (بیکنگ سٹوریج) پر سیٹ ہوتا ہے، خود خصوصیت پر نہیں۔ Swift میں، watchpoint set variable self.property استعمال کریں — LLDB خود بخود خصوصیت کے نام سے متعلقہ ivar تلاش کر لے گا۔

Watchpoint ایپلیکیشن کی کارکردگی کو کیسے متاثر کرتا ہے؟

ہارڈویئر watchpoints کارکردگی کو متاثر نہیں کرتے — انٹرپٹ پروسیسر کی سطح پر ہوتا ہے۔ سافٹ ویئر watchpoints (جب ہارڈویئر رجسٹر ختم ہو جاتے ہیں) عمل کو 10–50 گنا سست کر دیتے ہیں، کیونکہ LLDB ہر تحریر کی ہدایت کو چیک کرتا ہے۔

خلاصہ

  • Watchpoint — میموری تبدیلیوں کی نگرانی کرنے والا پوائنٹ، کسی بھی تھریڈ سے مخصوص ایڈریس پر تحریر پر فعال ہوتا ہے۔
  • ہارڈویئر watchpoints پروسیسر DWT رجسٹر استعمال کرتے ہیں اور عمل کو سست نہیں کرتے، لیکن 4–8 رجسٹرز تک محدود ہیں۔
  • LLDB تین اقسام کے watchpoints کو سپورٹ کرتا ہے: متغیر پر، اظہار پر اور خام میموری ایڈریس پر۔
  • مشروط watchpoints صرف اس وقت فعال ہوتے ہیں جب کوئی مخصوص اظہار سچ ہو — اعلی تعدد تبدیلیوں کی ڈیبگنگ کے لیے ضروری۔
  • آبجیکٹ خصوصیات اور کلیکشن عناصر پر Watchpoints میموری دوبارہ مختص کرنے پر غلط ہو جاتے ہیں۔
  • Watchpoints سیشنز کے درمیان محفوظ نہیں رہتے اور متغیر کی حدود سے باہر ہونے پر ہٹا دیے جاتے ہیں۔
  • Watchpoint بہترین انتخاب ہے جب متغیر معلوم ہو لیکن اس کی تبدیلی کی جگہ معلوم نہ ہو، خاص طور پر ملٹی تھریڈڈ کوڈ میں۔

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

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

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

مزید پڑھیں