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" فراخوانی می‌شود. پس از اجرا، دستورها را از ترمینال می‌خواند تا زمانی که با دستور "quit" یا "exit" در GDB از آن خارج شوید. می‌توانید از طریق خود GDB با استفاده از دستور "help" راهنمای برخط دریافت کنید.

می‌توانید "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): نمایش پشته (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.
اجرای دستور مشخص‌شده GDB در command.
اجرای دستور GDB در command پیش از بارگذاری فرایند تحت اشکال‌زدایی (inferior).
افزودن دایرکتوری directory به مسیر جستجوی فایل‌های منبع.
دستورها را از ~/.config/gdb/gdbinit، ~/.gdbinit، ~/.config/gdb/gdbearlyinit یا ~/.gdbearlyinit اجرا نمی‌کند.
دستورها را از هیچ‌یک از فایل‌های مقداردهی اولیه .gdbinit یا .gdbearlyinit اجرا نمی‌کند.
"حالت ساکت". پیام‌های مقدماتی و حق تکثیر را چاپ نمی‌کند. این پیام‌ها در حالت دسته‌ای (batch mode) نیز خاموش می‌شوند.
اجرا در حالت دسته‌ای (batch mode). پس از پردازش تمام فایل‌های دستور مشخص‌شده با -x (و .gdbinit در صورتی که مهار نشده باشد)، با وضعیت خروج 0 به پایان می‌رسد. در صورت بروز خطا هنگام اجرای دستورهای GDB درون فایل‌های دستور، با وضعیت غیر صفر خارج می‌شود.

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

Program exited normally.

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

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

این گزینه به عنوان مثال هنگام استفاده از هدف‌هایی که پیام‌های 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 اعلام می‌کند هر بار که یک فریم پشته نمایش داده می‌شود (که شامل هر بار توقف برنامه نیز هست)، نام کامل فایل و شماره خط را با قالبی استاندارد و قابل تشخیص در خروجی بنویسد. این قالب قابل تشخیص شبیه به دو نویسهٔ \032 است که به‌دنبال آن نام فایل، شماره خط و موقعیت نویسه با دونقطه (:) از هم جدا شده و در پایان یک خط جدید می‌آید. برنامه رابط Emacs-to-GDB از این دو نویسهٔ \032 به‌عنوان نشانه‌ای برای نمایش کد منبع فریم مربوطه استفاده می‌کند.
تنظیم سرعت خط (baud rate یا بیت بر ثانیه) برای هر رابط سریالی که توسط 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