Foundationপ্রথম নীতি থেকে
LEVEL 3 · Assembly Language

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 হাঁটার একটা স্বয়ংক্রিয় সংস্করণ মাত্র।