GDB(1) ابزارهای توسعه گنو GDB(1)

gdb - اشکال‌زدای گنو

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

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

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

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

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

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

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

gdb program

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

gdb program core

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

gdb program 1234
gdb -p 1234

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

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

تنظیم یک نقطه توقف (breakpoint) در function یا line (در file).
شروع برنامهٔ شما (با arglist، در صورت تعیین شدن).
ردیابی به عقب (Backtrace): نمایش پشتهٔ برنامه.
نمایش مقدار یک عبارت.
ادامهٔ اجرای برنامه (پس از توقف، برای نمونه در یک نقطه توقف).
اجرای سطر بعدی برنامه (پس از توقف)؛ رد شدن از روی (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" در دسترس است.

هر آرگومانی غیر از گزینه‌ها یک فایل اجرایی و یک فایل core (یا شناسهٔ فرایند ID) را مشخص می‌کند؛ یعنی، نخستین آرگومانِ فاقد هرگونه پرچمِ گزینهٔ مرتبط، معادل گزینهٔ --se است، و دومی، در صورت وجود، چنانچه نام یک فایل باشد معادل گزینهٔ -c خواهد بود. بسیاری از گزینه‌ها هر دو شکل بلند و کوتاه دارند؛ هر دو در اینجا نشان داده شده‌اند. شکل‌های بلند در صورتی که آن‌ها را کوتاه کنید نیز قابل شناسایی هستند، تا زمانی که به اندازهٔ کافی از گزینه وجود داشته باشد تا بدون ابهام باشد.

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

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

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

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

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

Program exited normally.

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

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

این گزینه به‌ویژه هنگام استفاده از هدف‌هایی که مثلاً پیام‌های Loading section می‌دهند کاربرد دارد.

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

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

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

gdb --args ./a.out -q

GDB را با پیام مقدماتی آغاز می‌کند و گزینه را به فرآیند تحت دیباگ پاس می‌دهد.

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

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

info gdb

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

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

Copyright (c) 1988-2025 Free Software Foundation, Inc.

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

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

2025-12-20 gdb-17.1