GDBSERVER(1) GNU Development Tools GDBSERVER(1)

aarch64-linux-gnu-gdbserver - کارساز از راه دور برای اشکال‌زدای گنو (GDB)

gdbserver comm prog [args...]

gdbserver --attach comm pid

gdbserver --multi comm

برنامه gdbserver به شما امکان می‌دهد GDB را روی دستگاهی متفاوت از دستگاهی که برنامه مورد اشکال‌زدایی در آن در حال اجرا است، اجرا کنید.

طرز استفاده (سمت کارساز / هدف):

ابتدا باید یک نسخه از برنامه‌ای را که می‌خواهید اشکال‌زدایی کنید روی سامانه هدف قرار دهید. برنامه را می‌توان برای صرفه‌جویی در فضا در صورت نیاز strip کرد (نمادها را حذف نمود)، زیرا gdbserver به نمادها (symbols) نیازی ندارد. تمام مدیریت نمادها توسط GDB در حال اجرا روی سامانه میزبان انجام می‌شود.

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

target> gdbserver <comm> <program> [<args> ...]

برای مثال، با استفاده از یک درگاه سریال، می‌توانید بنویسید:

target> gdbserver /dev/com1 emacs foo.txt

این دستور به gdbserver می‌گوید که emacs را با آرگومان foo.txt اشکال‌زدایی کند و از طریق /dev/com1 با GDB ارتباط برقرار نماید. اکنون gdbserver منتظر می‌ماند تا GDB میزبان با آن ارتباط برقرار کند.

برای استفاده از یک اتصال TCP، می‌توانید بنویسید:

target> gdbserver host:2345 emacs foo.txt

این دستور تقریباً همان کار مثال قبل را انجام می‌دهد، با این تفاوت که از طریق TCP با "host" GDB ارتباط برقرار می‌کنیم. آرگومان "host:2345" به این معنی است که ما منتظر یک اتصال TCP از "host" به درگاه محلی TCP با شماره ۲۳۴۵ هستیم. (در حال حاضر، بخش "host" نادیده گرفته می‌شود.) تا زمانی که شماره درگاه با هیچ‌یک از درگاه‌های TCP موجود در سامانه هدف تداخل نداشته باشد، می‌توانید هر شماره‌ای را برای درگاه انتخاب کنید. همین شماره درگاه باید در دستور "target remote" مربوط به GDB میزبان استفاده شود، که به زودی شرح داده خواهد شد. توجه داشته باشید اگر شماره درگاهی را انتخاب کنید که با سرویس دیگری تداخل دارد، gdbserver پیام خطا چاپ کرده و خارج می‌شود.

برنامه gdbserver همچنین می‌تواند به برنامه‌های در حال اجرا متصل شود (attach). این کار از طریق آرگومان --attach انجام می‌شود. نحو به این صورت است:

target> gdbserver --attach <comm> <pid>

مقدار pid شناسه فرآیند در حال اجرا است. نیازی نیست gdbserver را به پرونده باینری فرآیند در حال اجرا ارجاع دهید.

برای شروع "gdbserver" بدون ارائه دستور اولیه برای اجرا یا شناسه فرآیند برای اتصال، از گزینه خط فرمان --multi استفاده کنید. در این حالت باید با استفاده از "target extended-remote" متصل شوید تا برنامه‌ای را که می‌خواهید اشکال‌زدایی کنید اجرا نمایید.

target> gdbserver --multi <comm>

طرز استفاده (سمت میزبان):

شما به یک نسخه حاوی نمادها (unstripped) از برنامه هدف روی سامانه میزبان خود نیاز دارید، زیرا GDB باید جدول‌های نماد و موارد مشابه را بررسی کند. GDB را مطابق معمول اجرا کنید، با این تفاوت که برنامه هدف آرگومان اول آن باشد. (اگر خط سریال با سرعتی غیر از ۹۶۰۰ کار می‌کند، ممکن است لازم باشد از گزینه --baud استفاده کنید.) یعنی "gdb TARGET-PROG" یا "gdb --baud BAUD TARGET-PROG". پس از آن، تنها دستور جدیدی که باید بدانید "target remote" (یا "target extended-remote") است. آرگومان آن یا نام یک دستگاه است (معمولاً یک دستگاه سریال مانند /dev/ttyb)، یا یک توصیف‌کننده "HOST:PORT". برای مثال:

(gdb) target remote /dev/ttyb

از طریق خط سریال /dev/ttyb با کارساز ارتباط برقرار می‌کند، و:

(gdb) target remote the-target:2345

از طریق اتصال TCP به درگاه ۲۳۴۵ روی میزبان `the-target'، جایی که قبلاً gdbserver را با همان شماره درگاه راه‌اندازی کرده‌اید، ارتباط برقرار می‌کند. توجه داشته باشید که برای اتصالات TCP، باید پیش از استفاده از دستور `target remote'، کارساز gdbserver را راه‌اندازی کرده باشید، در غیر این صورت ممکن است با خطایی مانند `Connection refused' مواجه شوید.

برنامه gdbserver همچنین می‌تواند چندین فرآیند زیرین (inferiors) را به طور همزمان اشکال‌زدایی کند، که در راهنمای GDB در بخش "Inferiors Connections and Programs" توضیح داده شده است -- دستور پوسته "info -f gdb -n 'Inferiors Connections and Programs'". در این حالت از دستور دیگر یعنی "extended-remote" در GDB استفاده کنید:

(gdb) target extended-remote the-target:2345

در این حالت گزینه --multi در gdbserver ممکن است استفاده شود یا نشود.

سه حالت مختلف برای فراخوانی gdbserver وجود دارد:

  • اشکال‌زدایی یک برنامه خاص که با نام برنامه مشخص می‌شود:
    gdbserver <comm> <prog> [<args>...]

    پارامتر comm نحوه ارتباط کارساز با GDB را مشخص می‌کند؛ این پارامتر یا نام یک دستگاه است (برای استفاده از خط سریال)، یا یک شماره درگاه TCP (":1234")، یا "-" یا "stdio" برای استفاده از stdin/stdout در "gdbserver". نام برنامه مورد اشکال‌زدایی را در prog مشخص کنید. هر آرگومان باقی‌مانده عینا به برنامه ارسال می‌شود. وقتی برنامه پایان می‌یابد، GDB اتصال را بسته و "gdbserver" خارج خواهد شد.

  • اشکال‌زدایی یک برنامه خاص با تعیین شناسه فرآیند در حال اجرای آن:
    gdbserver --attach <comm> <pid>

    پارامتر comm مطابق توضیحات بالا است. شناسه فرآیند در حال اجرا را در pid مشخص کنید؛ GDB سایر کارها را انجام خواهد داد. مانند حالت قبل، هنگامی که فرآیند pid پایان می‌یابد، GDB اتصال را بسته و "gdbserver" خارج می‌شود.

  • حالت چندفرآیندی -- اشکال‌زدایی بیش از یک برنامه/فرآیند:
    gdbserver --multi <comm>

    در این حالت، GDB می‌تواند به gdbserver دستور دهد که چه فرمان‌هایی را اجرا کند. برخلاف ۲ حالت دیگر، وقتی فرآیند در حال اشکال‌زدایی پایان یابد GDB اتصال را نخواهد بست، بنابراین می‌توانید چندین فرآیند را در همان نشست اشکال‌زدایی کنید.

در هر یک از حالات می‌توانید این گزینه‌ها را مشخص کنید:

فهرست کردن تمامی گزینه‌ها به همراه توضیحات مختصر.
چاپ شماره نسخه gdbserver و خروج.
برنامه gdbserver به یک برنامه در حال اجرا متصل می‌شود. نحو به این صورت است:
target> gdbserver --attach <comm> <pid>

مقدار pid شناسه فرآیند در حال اجرا است. نیازی به مشخص کردن فایل باینری برای فرآیند در حال اجرا نیست.

برای شروع "gdbserver" بدون ارائه دستور اولیه جهت اجرا یا شناسه فرآیند جهت اتصال، از این گزینه خط فرمان استفاده کنید. سپس می‌توانید با استفاده از "target extended-remote" متصل شده و برنامه مورد اشکال‌زدایی را شروع نمایید. نحو به این صورت است:
target> gdbserver --multi <comm>
دستور به "gdbserver" برای نمایش اطلاعات وضعیت بیشتر درباره فرآیند اشکال‌زدایی. این گزینه برای توسعه "gdbserver" و گزارش اشکالات به توسعه‌دهندگان در نظر گرفته شده است.

هر option نام مؤلفه‌ای است که اشکال‌زدایی برای آن باید فعال شود. فهرست گزینه‌های ممکن عبارتند از all، threads، event-loop، remote. گزینه ویژه all تمام مؤلفه‌ها را فعال می‌کند. فهرست گزینه‌ها از چپ به راست پردازش می‌شود و یک گزینه می‌تواند با نویسه "-" پیشوند شود تا خروجی آن مؤلفه غیرفعال گردد؛ بنابراین می‌توانید بنویسید:

target> gdbserver --debug=all,-event-loop

تا خروجی اشکال‌زدایی برای همه مؤلفه‌ها به جز event-loop فعال شود. اگر هیچ گزینه‌ای به --debug داده نشود، معادل با --debug=threads در نظر گرفته می‌شود. این رفتار ممکن است در نسخه‌های آینده "gdbserver" تغییر کند.

دستور به "gdbserver" برای ارسال هرگونه خروجی اشکال‌زدایی به فایل مشخص‌شده در filename. این گزینه برای توسعه "gdbserver" و گزارش اشکالات به توسعه‌دهندگان است.
دستور به "gdbserver" برای افزودن اطلاعات بیشتر به هر خط از خروجی اشکال‌زدایی.
مشخص کردن یک لفاف (wrapper) برای راه‌اندازی برنامه‌ها جهت اشکال‌زدایی. به دنبال این گزینه باید نام لفاف، سپس هر آرگومان خط فرمان برای ارسال به لفاف، و سپس "--" که نشان‌دهنده پایان آرگومان‌های لفاف است، مشخص شود.
به طور پیش‌فرض، gdbserver درگاه گوش‌دادن TCP را باز نگه می‌دارد تا امکان اتصالات بیشتر فراهم باشد. با این حال، اگر "gdbserver" را با گزینه --once اجرا کنید، پس از برقراری اتصال به اولین نشست GDB، گوش دادن به تلاش‌های بعدی برای اتصال متوقف خواهد شد.

مستندات کامل 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.

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

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

(a) متن پشت جلد FSF عبارت است از: «You are free to copy and modify this GNU Manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom.»

2026-05-10 gdb-17.2