GDB(1) GNU Development Tools GDB(1)

avr-gdb, gdb - اشکالزدای گنو برای میکروکنترلرهای AVR

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

هدف از یک اشکال‌زدا مانند GDB این است که به شما اجازه دهد ببینید چه چیزی «درون» یک برنامه دیگر در حین اجرا در جریان است -- یا اینکه برنامه دیگر دقیقاً در لحظه از کار افتادن (crash) چه کاری انجام می‌داده است.

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

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

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

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

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

gdb program

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

gdb program core

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

gdb program 1234
gdb -p 1234

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

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

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

برای جزئیات کامل درباره GDB، کتاب Using GDB: A Guide to the GNU Source-Level Debugger اثر Richard M. Stallman و Roland H. Pesch را ببینید. همین متن به صورت برخط به عنوان مدخل "gdb" در برنامه "info" در دسترس است.

هر آرگومانی به جز گزینه‌ها، یک فایل اجرایی و فایل هسته (یا شناسه فرایند) را مشخص می‌کند؛ یعنی نخستین آرگومانِ بدون فلگِ گزینه معادل گزینه --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.
اجرای command در GDB پیش از بارگذاری برنامه تحت اشکال‌زدایی (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 است و برای یک نشست تعاملی بی‌فایده خواهد بود.

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

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

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

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

gdb --args ./a.out -q

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

اتصال GDB به یک برنامه از قبل در حال اجرا با شناسه فرایند pid.
باز کردن واسط کاربری متنی ترمینال (TUI).
خواندن تمام نمادها از فایل نماد مشخص‌شده در نخستین دسترسی.
عدم خواندن فایل‌های نماد.
کد خروج GDB برابر با کد خروج فرایند فرزند خواهد بود.
چاپ جزئیات مربوط به پیکربندی GDB و سپس خروج.
چاپ اطلاعات نسخه و سپس خروج.
اجرای GDB با استفاده از directory به عنوان دایرکتوری کاری به جای دایرکتوری جاری.
اجرای GDB با استفاده از directory به عنوان دایرکتوری داده. دایرکتوری داده محلی است که GDB در آن به دنبال فایل‌های کمکی خود می‌گردد.
ویرایشگر Emacs هنگامی که GDB را به عنوان یک زیرفرآیند اجرا می‌کند این گزینه را تنظیم می‌نماید. این گزینه به GDB می‌گوید هربار که یک فریم پشته نمایش داده می‌شود (که شامل هربار توقف برنامه است)، نام کامل فایل و شماره خط را به شیوه‌ای استاندارد و قابل تشخیص خروجی دهد. این فرمت قابل تشخیص شبیه به دو کاراکتر \032 است که پس از آن‌ها نام فایل، شماره خط و موقعیت کاراکتر با دونقطه از یکدیگر جدا شده‌اند و در انتها یک خط جدید قرار دارد. برنامه رابط Emacs به 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 and Roland H. Pesch, July 1991.

حق نشر © 1988-2025 بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.)

اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه بالاتر منتشر شده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، با متون جلد رویی به عنوان «یک کتابچه راهنمای گنو (A GNU Manual)»، و با متون جلد پشتی به شرح (الف) در زیر.

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

2026-05-10 gdb-17.2