gdb
জিডিবি
GNU Debugger — ptrace() দিয়ে একটা চলমান প্রসেস নিয়ন্ত্রণ করে breakpoint, register, memory সরাসরি পরীক্ষা করার টুল।
also: GDB, GNU Debugger
Interpreter না — যে প্রোগ্রাম ডিবাগ হচ্ছে সেটা স্বাভাবিক নেটিভ
মেশিন কোড হিসেবেই CPU-তে চলে। break আসলে target instruction-এর
byte সাময়িকভাবে int3 (0xCC, trap) দিয়ে বদলে দেয়; CPU সেখানে
পৌঁছালে trap হয়, kernel gdb-কে জানায় (ptrace())।
Core কমান্ড:
break/run/next/step/continue সাধারণ workflow — source-line স্তরে
disassemble বর্তমান function-এর assembly (set disassembly-flavor intel দিয়ে Intel syntax)
info registers সব register-এর বর্তমান মান
x/4xw addr memory examine — count/format/unit/address
stepi / nexti instruction-level single-step (source লাইন না, একটা machine instruction)
next/step একটা সম্পূর্ণ source লাইন এগোয় (একাধিক
instruction একসাথে); nexti/stepi ঠিক একটা instruction —
এটাই instruction-level debugging-এর প্রকৃত অর্থ।
break function_name ডিফল্টভাবে prologue টপকে থামে (debug info
অনুযায়ী প্রথম source statement-এ) — prologue নিজে দেখতে চাইলে
break *function_name (ঠিকানা-ভিত্তিক) দরকার।
Debug info (-g, DWARF, .debug_* section) ছাড়াও disassemble/
info registers/x/stepi সবই কাজ করে — শুধু source-line mapping
আর variable-নাম-ভিত্তিক access (print a) debug info ছাড়া অসম্ভব।
Python API (gdb.Command) দিয়ে নিজের কমান্ড লেখা যায় — gdb-এর
নিজস্ব backtrace মূলত [rbp]/[rbp+8] বারবার পড়ে frame chain
হাঁটার একটা স্বয়ংক্রিয় সংস্করণ মাত্র।