লুয়া (Lua) ভাষায় debug লাইব্রেরি এমন একটি শক্তিশালী টুল যা আপনাকে প্রোগ্রামটির কার্যক্রম ডিবাগ করতে সহায়তা করে। এই লাইব্রেরি বিভিন্ন ফাংশন সরবরাহ করে, যা দিয়ে আপনি রuntime এর মধ্যে কোডের কার্যকলাপ পরীক্ষা, ত্রুটি সনাক্তকরণ, এবং ভ্যারিয়েবল বা ফাংশন কলের বিশদ পর্যবেক্ষণ করতে পারেন।
এই টিউটোরিয়ালে আমরা debug লাইব্রেরির কিছু প্রধান ফাংশন এবং তাদের ব্যবহার দেখব।
১. debug.getinfo
debug.getinfo ফাংশনটি একটি ফাংশন বা কোডের সনাক্তকৃত তথ্য প্রদান করে, যেমন কোডের অবস্থান, ফাইলের নাম, ফাংশনের আর্গুমেন্ট, এবং তার পজিশন ইত্যাদি।
সিনট্যাক্স:
debug.getinfo(function, what)function: যে ফাংশনের তথ্য আপনি চান তা এখানে পাস করতে হবে (ফাংশনের নাম বা স্ট্যাক পজিশন হতে পারে)।what: যে ধরনের তথ্য আপনি চান, যেমন"n"(ফাংশনের নাম),"S"(ফাইলের নাম এবং লাইন নম্বর),"l"(লাইনের নম্বর) ইত্যাদি।
উদাহরণ:
function testFunction(a, b)
return a + b
end
local info = debug.getinfo(testFunction, "S")
print("File: " .. info.source) -- আউটপুট: ফাইলের নাম
print("Line: " .. info.linedefined) -- আউটপুট: ফাংশন শুরু হওয়ার লাইন নম্বরএখানে, debug.getinfo ফাংশনটি testFunction সম্পর্কে ফাইলের নাম এবং লাইনের নম্বর প্রদান করবে।
২. debug.getlocal
debug.getlocal ফাংশনটি একটি ফাংশনের লোকাল ভ্যারিয়েবল এবং তাদের মান প্রদান করে। এটি স্ট্যাক ট্রেস থেকে ফাংশনের ভ্যারিয়েবল এবং তাদের মান বের করতে ব্যবহৃত হয়।
সিনট্যাক্স:
debug.getlocal(stack_level, local_index)stack_level: যে স্ট্যাক লেভেলের ভ্যারিয়েবল আপনি দেখতে চান।local_index: ভ্যারিয়েবলটির ইনডেক্স (ফাংশনের প্যারামিটার বা লোকাল ভ্যারিয়েবল হিসেবে)।
উদাহরণ:
function testFunction(a, b)
local sum = a + b
local product = a * b
print(debug.getlocal(1, 1)) -- আউটপুট: a
print(debug.getlocal(1, 2)) -- আউটপুট: b
print(debug.getlocal(1, 3)) -- আউটপুট: sum
print(debug.getlocal(1, 4)) -- আউটপুট: product
end
testFunction(5, 3)এখানে, debug.getlocal ফাংশনটি testFunction এর ভিতরের লোকাল ভ্যারিয়েবলগুলোর নাম এবং মান প্রদর্শন করবে।
৩. debug.setlocal
debug.setlocal ফাংশনটি স্ট্যাকের নির্দিষ্ট স্তরের লোকাল ভ্যারিয়েবল মান পরিবর্তন করতে ব্যবহৃত হয়।
সিনট্যাক্স:
debug.setlocal(stack_level, local_index, value)stack_level: যে স্তরের ভ্যারিয়েবল আপনি পরিবর্তন করতে চান।local_index: ভ্যারিয়েবলটির ইনডেক্স (যেমন, ফাংশনের প্যারামিটার বা লোকাল ভ্যারিয়েবল)।value: নতুন মান যা আপনি সেট করতে চান।
উদাহরণ:
function testFunction(a, b)
local sum = a + b
debug.setlocal(1, 3, 100) -- sum ভ্যারিয়েবলের মান 100 করা
print(debug.getlocal(1, 3)) -- আউটপুট: sum 100
end
testFunction(5, 3)এখানে, debug.setlocal ফাংশনটি sum ভ্যারিয়েবলের মান পরিবর্তন করে 100 সেট করেছে।
৪. debug.traceback
debug.traceback ফাংশনটি একটি স্ট্যাক ট্রেস তৈরি করে, যা আপনাকে প্রোগ্রামে কোথায় ত্রুটি ঘটেছে তা জানতে সাহায্য করে। এটি সাধারণত ত্রুটির ডিবাগিংয়ের জন্য ব্যবহার করা হয়।
সিনট্যাক্স:
debug.traceback([thread,] [message[, level]])thread: যেটি মূল থ্রেডের জন্য ব্যবহৃত হয় (অপশনাল)।message: স্ট্যাক ট্রেসের সাথে একটি বার্তা যোগ করতে পারেন (অপশনাল)।level: কতটা গভীর ট্রেস প্রয়োজন, সাধারণত2বা3স্তরের ট্রেস দেখানো হয়।
উদাহরণ:
function testFunction()
error("Something went wrong!")
end
function callFunction()
testFunction()
end
print(debug.traceback(callFunction)) -- আউটপুট: স্ট্যাক ট্রেস সহ ত্রুটির বার্তাএখানে, debug.traceback ফাংশনটি callFunction এর মধ্যে ঘটে যাওয়া ত্রুটির স্ট্যাক ট্রেস প্রদর্শন করবে।
৫. debug.upvaluejoin এবং debug.getupvalue
debug.getupvalue ফাংশনটি একটি ফাংশনের আপভ্যালু (upvalue) ফিরিয়ে দেয়, যা ফাংশনের বাইরে সংরক্ষিত কোনো ভ্যালু।
debug.upvaluejoin ফাংশনটি একটি আপভ্যালু সেট করতে ব্যবহৃত হয়।
উদাহরণ:
function outer()
local x = 10
function inner()
return x -- x is an upvalue
end
return inner
end
local innerFunction = outer()
print(debug.getupvalue(innerFunction, 1)) -- আউটপুট: xএখানে, debug.getupvalue ফাংশনটি inner ফাংশনের আপভ্যালু x প্রদান করবে।
সারসংক্ষেপ
লুয়া debug লাইব্রেরি একটি শক্তিশালী টুল যা আপনাকে প্রোগ্রামটির রUNTIME ডিবাগিং করার জন্য বিভিন্ন ফাংশন সরবরাহ করে। এর মাধ্যমে আপনি:
debug.getinfo: ফাংশনের তথ্য পেতে,debug.getlocal: লোকাল ভ্যারিয়েবল এবং তাদের মান দেখতে,debug.setlocal: লোকাল ভ্যারিয়েবল মান পরিবর্তন করতে,debug.traceback: স্ট্যাক ট্রেস বের করতে,debug.getupvalue: ফাংশনের আপভ্যালু দেখতে এবং,debug.upvaluejoin: আপভ্যালু সেট করতে পারবেন।
এই ফাংশনগুলো ডেভেলপারদের ডিবাগিংয়ের সময় অনেক সাহায্য করে, এবং কোডের ত্রুটি দ্রুত শনাক্ত করতে সহায়তা করে।
Read more