GDB(1) GNU Development Tools GDB(1)

gdb - دیباگر گنو

gdb [OPTIONS] [prog|prog procID|prog core]

هدف یک دیباگر مانند GDB این است که به شما امکان دهد ببینید در حین اجرای برنامه‌ای دیگر، "درون" آن چه می‌گذرد -- یا اینکه برنامه در لحظهٔ فروپاشی (crash) دقیقاً مشغول انجام چه کاری بوده است.

GDB می‌تواند چهار کار اصلی (به همراه موارد دیگر در پشتیبانی از آن‌ها) انجام دهد تا به شما در یافتن باگ‌ها در حین وقوع کمک کند:

  • اجرای برنامهٔ شما، با تعیین هر چیزی که ممکن است بر رفتار آن تأثیر بگذارد.
  • متوقف کردن برنامه بر اساس شرایط مشخص‌شده.
  • بررسی آنچه رخ داده است، هنگامی که برنامه متوقف شده است.
  • تغییر دادن مواردی در برنامه، تا بتوانید تأثیر اصلاح یک باگ را بیازمایید و به بررسی باگ‌های دیگر بپردازید.

می‌توانید از GDB برای اشکال‌زدایی برنامه‌های نوشته‌شده به زبان‌های C، C++، Fortran و Modula-2 استفاده کنید.

GDB با دستور پوستهٔ "gdb" فراخوانی می‌شود. پس از آغاز به کار، دستورها را از ترمینال می‌خواند تا زمانی که با دستور GDB یعنی "quit" یا "exit" به آن فرمان خروج دهید. همچنین می‌توانید با استفاده از دستور "help" از خود GDB راهنمای برخط دریافت کنید.

می‌توانید "gdb" را بدون هیچ آرگومان یا گزینه‌ای اجرا کنید؛ اما معمول‌ترین روش برای شروع GDB با یک یا دو آرگومان است که در آن یک برنامهٔ اجرایی به عنوان آرگومان مشخص می‌شود:

gdb program

همچنین می‌توانید آن را با مشخص کردن هم‌زمان یک برنامهٔ اجرایی و یک فایل core آغاز کنید:

gdb program core

در صورتی که می‌خواهید یک فرایند در حال اجرا را اشکال‌زدایی کنید، می‌توانید به‌جای آن یک شناسهٔ فرایند (ID) را به عنوان آرگومان دوم تعیین کنید یا از گزینهٔ "-p" بهره ببرید:

gdb program 1234
gdb -p 1234

این دستورها GDB را به فرایند 1234 متصل (attach) می‌کنند. با استفاده از گزینهٔ -p می‌توانید نام فایل program را حذف کنید.

در اینجا برخی از پرکاربردترین دستورهای GDB آورده شده است:

تنظیم یک نقطهٔ توقف (breakpoint) در function یا line (درون file).
شروع برنامهٔ شما (به همراه arglist در صورت مشخص شدن).
ردگیری به عقب (Backtrace): نمایش پشتهٔ (stack) برنامه.
نمایش مقدار یک عبارت.
ادامه دادن اجرای برنامه (پس از توقف، برای مثال در یک نقطهٔ توقف).
اجرای خط بعدی برنامه (پس از توقف)؛ رد شدن از روی فراخوانی‌های توابع در آن خط (over).
مشاهدهٔ خطی از برنامه که در حال حاضر در آن متوقف شده است.
چاپ متن برنامه در حوالی نقطه‌ای که در حال حاضر متوقف شده است.
اجرای خط بعدی برنامه (پس از توقف)؛ ورود به درون هر فراخوانی تابع در آن خط (into).
نمایش اطلاعات دربارهٔ دستور name در GDB، یا اطلاعات کلی پیرامون استفاده از GDB.
خروج از GDB.

برای جزئیات کامل پیرامون GDB، کتاب Using GDB: A Guide to the GNU Source-Level Debugger نوشتهٔ Richard M. Stallman و Roland H. Pesch را ببینید. همین متن به‌صورت برخط تحت مدخل "gdb" در برنامهٔ "info" نیز در دسترس است..SH "گزینه‌ها (OPTIONS)" هر آرگومانی به جز گزینه‌ها، یک فایل اجرایی و فایل core (یا شناسه فرایند ID) را مشخص می‌کند؛ بدین معنا که نخستین آرگومان بدون پرچمِ گزینه معادل گزینهٔ --se است، و دومین آرگومان، در صورت وجود، اگر نام یک فایل باشد معادل گزینهٔ -c خواهد بود. بسیاری از گزینه‌ها دارای هر دو شکل طولانی و کوتاه هستند؛ هر دو شکل در اینجا نشان داده شده‌اند. شکل‌های طولانی در صورتی که آنها را خلاصه کنید نیز تا زمانی که بخش کافی از گزینه برای رفع ابهام وجود داشته باشد، شناسایی می‌شوند.

شکل‌های کوتاه در اینجا با - و شکل‌های طولانی با -- نشان داده شده‌اند تا نحوهٔ نمایش آن‌ها در --help منعکس شود. با این حال، GDB تمام قراردادهای زیر را برای اکثر گزینه‌ها به رسمیت می‌شناسد:

"--option=value"
"--option value"
"-option=value"
"-option value"
"--o=value"
"--o value"
"-o=value"
"-o value"

تمام گزینه‌ها و آرگومان‌های خط فرمانی که ارائه می‌دهید به ترتیب متوالی پردازش می‌شوند. هنگام استفاده از گزینهٔ -x، این ترتیب تفاوت ایجاد می‌کند.

فهرست کردن تمام گزینه‌ها، همراه با توضیحات کوتاه.
خواندن جدول نمادها (symbol table) از file.
فعال کردن امکان نوشتن در فایل‌های اجرایی و فایل‌های core.
استفاده از file به عنوان فایل اجرایی جهت اجرا در زمان مناسب، و بررسی داده‌های خالص در ارتباط با یک core dump.
خواندن جدول نمادها از file و استفاده از آن به عنوان فایل اجرایی.
استفاده از file به عنوان یک core dump جهت بررسی.
اجرای دستورهای GDB از file.
اجرای command داده‌شدهٔ GDB.
اجرای command GDB پیش از بارگذاری فرایند تحت بررسی (inferior).
افزودن directory به مسیر جستجوی فایل‌های منبع.
دستورها را از ~/.config/gdb/gdbinit، ~/.gdbinit، ~/.config/gdb/gdbearlyinit یا ~/.gdbearlyinit اجرا نکن.
دستورها را از هیچ‌یک از فایل‌های راه‌اندازی اولیهٔ .gdbinit یا .gdbearlyinit اجرا نکن.
"بی‌صدا". پیام‌های مقدماتی و حق نشر را چاپ نکن. این پیام‌ها در حالت دسته‌ای (batch mode) نیز خاموش می‌شوند.
اجرا در حالت دسته‌ای (batch mode). خروج با وضعیت 0 پس از پردازش تمام فایل‌های دستوری مشخص‌شده با -x (و .gdbinit، در صورتی که مهار نشده باشد). خروج با وضعیت غیر صفر در صورت بروز خطا هنگام اجرای دستورهای GDB در فایل‌های دستوری.

حالت دسته‌ای می‌تواند برای اجرای GDB به عنوان یک پالایه (filter) مفید باشد، برای مثال جهت بارگیری و اجرای یک برنامه روی رایانه‌ای دیگر؛ به منظور کاربردی‌تر کردن این حالت، پیامِ

Program exited normally.

(که معمولاً هنگام پایان یافتن برنامه‌ای که تحت کنترل GDB اجرا می‌شود صادر می‌گردد) هنگام اجرا در حالت دسته‌ای صادر نمی‌شود.

اجرا در حالت دسته‌ای، درست مانند --batch، اما کاملاً بی‌صدا. تمام خروجی‌های GDB نادیده گرفته می‌شوند (بر stderr تأثیری ندارد). این حالت بسیار ساکت‌تر از --silent است و برای یک نشست تعاملی بلااستفاده خواهد بود.

این حالت به ویژه هنگام استفاده از مقصدهایی (targets) که برای نمونه پیام‌های Loading section صادر می‌کنند، کاربردی است.

توجه داشته باشید مقصدهایی که خروجی خود را به جای نوشتن مستقیم در "stdout"، از طریق GDB ارائه می‌دهند نیز ساکت خواهند شد.

تغییر تفسیر خط فرمان به گونه‌ای که آرگومان‌های پس از این گزینه، به عنوان آرگومان به فرایند تحت بررسی (inferior) ارسال شوند. به عنوان مثال، دستور زیر را در نظر بگیرید:
gdb ./a.out -q

این دستور GDB را با -q آغاز می‌کند و پیام مقدماتی را چاپ نمی‌کند. از سوی دیگر، استفاده از:

gdb --args ./a.out -q

GDB را به همراه پیام مقدماتی اجرا کرده و گزینه را به فرایند تحت بررسی (inferior) ارسال می‌کند.

متصل کردن GDB به یک برنامهٔ در حال اجرا، با شناسهٔ فرایند PID pid..IP "--tui" 4 واسط کاربری متنی پایانه (TUI) را باز می‌کند.
در نخستین دسترسی، تمام نمادها را از symfile مشخص‌شده می‌خواند.
فایل‌های نماد را نمی‌خواند.
کد خروج GDB برابر با کد خروج فرایند فرزند خواهد بود.
جزئیات مربوط به پیکربندی GDB را چاپ کرده و سپس خارج می‌شود.
اطلاعات نسخه را چاپ کرده و سپس خارج می‌شود.
اجرای GDB با استفاده از directory به‌عنوان دایرکتوری کاری، به‌جای دایرکتوری جاری.
اجرای GDB با استفاده از directory به‌عنوان دایرکتوری دادهٔ آن. دایرکتوری داده مکانی است که GDB فایل‌های کمکی خود را در آن جست‌وجو می‌کند.
برنامه Emacs هنگام اجرای GDB به‌عنوان یک زیرفرایند، این گزینه را تنظیم می‌کند. این گزینه به GDB اعلام می‌کند که هر بار هنگام نمایش یک فریم پشته (stack frame) (که شامل هر بار توقف برنامه نیز می‌شود)، نام کامل فایل و شماره خط را با قالبی استاندارد و قابل تشخیص در خروجی بنویسد. این قالب مشخص به شکل دو نویسهٔ \032 است که پس از آن نام فایل، شماره خط و موقعیت نویسه با دونقطه (:) از یکدیگر جدا شده‌اند و به یک خط جدید ختم می‌شود. برنامه واسط Emacs-to-GDB از این دو نویسهٔ \032 به‌عنوان نشانه‌ای جهت نمایش کد منبع برای فریم مربوطه استفاده می‌کند.
تنظیم سرعت خط (نرخ باد یا بیت بر ثانیه) برای هر رابط سریالی که توسط GDB جهت اشکال‌زدایی از راه دور استفاده می‌شود.
تنظیم مهلت زمانی (timeout)، بر حسب ثانیه، برای اشکال‌زدایی از راه دور.
اجرا با استفاده از device به‌عنوان ورودی و خروجی استاندارد برنامهٔ شما.

مستندات کامل GDB به‌صورت یک کتابچه راهنمای Texinfo نگهداری می‌شود. اگر برنامه‌های "info" و "gdb" و مستندات Texinfo مربوط به GDB به‌درستی روی سامانه شما نصب شده باشند، دستور

info gdb

باید دسترسی به کتابچه راهنمای کامل را برای شما فراهم کند.

Using GDB: A Guide to the GNU Source-Level Debugger، نوشته Richard M. Stallman و Roland H. Pesch، ژوئیه ۱۹۹۱.

حق نشر (c) 1988-2025 متعلق به Free Software Foundation, Inc.

اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخهٔ ۱.۳ یا هر نسخهٔ متأخرتر منتشرشده توسط بنیاد نرم‌افزار آزاد اعطا می‌شود؛ با بخش‌های ناوردای "Free Software" و "Free Software Needs Free Documentation"، همراه با متن‌های روی جلد "A GNU Manual" و متن‌های پشت جلد به‌صورت بند (الف) در زیر.

(الف) متن پشت جلد FSF عبارت است از: "شما برای کپی و تغییر این راهنمای GNU آزاد هستید. خرید نسخه‌ها از GNU Press، از FSF در توسعهٔ GNU و ترویج آزادی نرم‌افزار حمایت می‌کند."

2025-12-20 gdb-17.1