GDB(1) دستورات عمومی کاربر GDB(1)

arm-none-eabi-gdb - دیباگر گنو برای سیستم‌های توکار و میکروکنترلرهای ARM

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

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

gdb program 1234
gdb -p 1234

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

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

تنظیم نقطه توقف (breakpoint) در function یا line (در file).
شروع اجرای برنامه شما (همراه با arglist، در صورت مشخص شدن).
ردیابی پشته (Backtrace): نمایش پشته فراخوانی برنامه.
نمایش مقدار عبارت expr.
ادامه اجرای برنامه شما (پس از توقف، برای نمونه در یک نقطه توقف).
اجرای خط بعدی برنامه (پس از توقف)؛ رد شدن از روی هرگونه فراخوانی تابع در آن خط (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 (یا شناسه پردازش) را مشخص می‌کند؛ یعنی نخستین آرگومان یافت‌شده بدون گزینه، معادل گزینه --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 به مسیر جستجوی فایل‌های منبع (source files).
عدم اجرای دستورات از ~/.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.
باز کردن رابط کاربری متنی ترمینال (Terminal User Interface).
خواندن تمامی نمادها از فایل نمادهای مشخص‌شده در همان اولین دسترسی.
عدم خواندن فایل‌های نماد.
کد خروج GDB همانند کد خروج فرزند (پردازش زیردست) خواهد بود.
چاپ جزئیات مربوط به پیکربندی GDB و سپس خروج.
چاپ اطلاعات نسخه و سپس خروج.
اجرای GDB با استفاده از directory به عنوان دایرکتوری کاری، به جای دایرکتوری جاری.
اجرای GDB با استفاده از directory به عنوان دایرکتوری داده‌های آن. دایرکتوری داده جایی است که GDB فایل‌های کمکی خود را در آن جستجو می‌کند.
ویرایشگر Emacs هنگام اجرای GDB به عنوان یک زیرپردازش این گزینه را تنظیم می‌کند. این گزینه به GDB می‌گوید هر بار که یک فریم پشته نمایش داده می‌شود (که شامل هر بار توقف برنامه نیز می‌شود)، نام کامل فایل و شماره خط را در قالبی استاندارد و قابل تشخیص خروجی دهد. این قالب قابل تشخیص شبیه دو کاراکتر \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 and Roland H. Pesch, July 1991.

حق نشر © ۱۹۸۸-۲۰۲۵ بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.)

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

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

2026-05-10 gdb-17.2