0Pricing
Lua Academy · درس

مكتبة debug بالتفصيل

استخدم debug.traceback وgetinfo وgetlocal وgetupvalue للاستبطان

مكتبة debug بالتفصيل درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

نظرة عامة على مكتبة debug

مكتبة debug هي مجموعة أدوات Lua لفحص الحالة الداخلية. تتيح لك فحص حالة وقت التشغيل لأي دالة أو كوروتين أو إطار مكدس وتعديلها.

استكشاف متعمق لـ debug.getinfo

تقبل debug.getinfo(f, what) علامات what التالية: "n" للاسم، و"S" للمصدر، و"l" للسطر الحالي، و"u" لـ upvalues، و"f" لمرجع الدالة.

local function foo()
  local info = debug.getinfo(1, "nSlu")
  print(info.name)        -- foo
  print(info.short_src)   -- source file
  print(info.currentline) -- line number
  print(info.nups)        -- number of upvalues
end
foo()

فحص المتغيرات المحلية

تعيد debug.getlocal(level, n) اسم وقيمة المتغير المحلي رقم n عند مستوى مكدس معيّن. المستوى 1 = الدالة الحالية.

local function example()
  local x, y = 10, 20
  local i = 1
  while true do
    local name, val = debug.getlocal(1, i)
    if not name then break end
    print(name, val)
    i = i + 1
  end
end
example()  -- x 10 / y 20

تعديل المتغيرات المحلية

تغيّر debug.setlocal(level, n, value) قيمة متغير محلي أثناء وقت التشغيل، وهي أداة قوية لتصحيح الأخطاء والاختبار.

فحص Upvalues

تعيد debug.getupvalue(fn, n) اسم وقيمة upvalue رقم n في دالة. كرّر ذلك بزيادة n حتى تُعاد القيمة nil.

local count = 0
local function inc() count = count + 1 end
print(debug.getupvalue(inc, 1))  -- count  0
debug.setupvalue(inc, 1, 99)
inc()
print(count)  -- 100

استكشاف المكدس

استكشف مكدس الاستدعاءات بالكامل بزيادة المستوى حتى تعيد debug.getinfo القيمة nil.

local function printStackTrace()
  local level = 1
  while true do
    local info = debug.getinfo(level, "Sln")
    if not info then break end
    print(level, info.short_src, info.currentline, info.name)
    level = level + 1
  end
end

debug.traceback

تعيد debug.traceback(msg, level) سلسلة نصية منسّقة لتتبّع المكدس. وهي أكثر دوال debug عملية لمعالجة الأخطاء في بيئات الإنتاج.

فحص الكوروتينات

مرّر كوروتين بوصفه الوسيط الأول إلى debug.getinfo لفحص مكدسه.

local co = coroutine.create(function()
  print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)

استخدام debug.sethook للتتبّع

تتبّع جميع استدعاءات الدوال في برنامج من خلال إعداد خطاف call يطبع أسماء الدوال.

debug.sethook(function(event)
  if event == "call" then
    local info = debug.getinfo(2, "Sn")
    print("CALL:", info.name or "?")
  end
end, "c")

تأكيدات قابلة للنقل

استخدم debug.getinfo(2, "Sl") لتضمين معلومات الملف ورقم السطر في أخطاء التأكيد.

local function assert2(cond, msg)
  if not cond then
    local info = debug.getinfo(2, "Sl")
    error(("[%s:%d] %s"):format(info.short_src, info.currentline, msg), 2)
  end
end

تحذير

قد تنتهك مكتبة debug مبدأ التغليف، وتبطئ البرامج بدرجة ملحوظة، خصوصًا عند استخدام debug.sethook، كما أنها غير متاحة في جميع البيئات. استخدمها في التطوير والاختبار فقط.

سؤال حول مكتبة debug

ماذا تعيد debug.getupvalue(fn, 1)؟

مراجعة: مكتبة debug بعمق

توفر مكتبة debug فحص المكدس عبر getinfo، وفحص المتغيرات المحلية وتعديلها عبر getlocal/setlocal، والوصول إلى upvalues عبر getupvalue/setupvalue، والتتبّع القائم على الخطافات عبر sethook. استخدمها بمسؤولية وفي مرحلة التطوير فقط.

الأسئلة الشائعة

هل درس «مكتبة debug بالتفصيل» مجاني؟

نعم — نص درس «مكتبة debug بالتفصيل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «مكتبة debug بالتفصيل»؟

استخدم debug.traceback وgetinfo وgetlocal وgetupvalue للاستبطان تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «مكتبة debug بالتفصيل»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مكتبة debug بالتفصيل
  2. التنقيح عن بُعد باستخدام MobDebug
  3. تحليل الأداء باستخدام LuaProfiler
  4. تغطية الشيفرة وقياس الاختبارات
← العودة إلى Lua Academy