.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "GDBSERVER 1" .TH GDBSERVER 1 2026-05-10 gdb-17.2 "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" gdbserver \- سرور راه‌دور برای اشکال‌زدای گنو (GNU Debugger) .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" gdbserver \fIcomm\fR \fIprog\fR [\fIargs\fR...] .PP gdbserver \-\-attach \fIcomm\fR \fIpid\fR .PP gdbserver \-\-multi \fIcomm\fR .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" \&\fBgdbserver\fR برنامه‌ای است که به شما امکان می‌دهد GDB را روی ماشینی متفاوت از ماشینی که برنامهٔ در حال اشکال‌زدایی را اجرا می‌کند، به کار ببندید. .PP شیوهٔ استفاده (سمت سرور (هدف)): .PP ابتدا، باید یک نسخه از برنامه‌ای را که می‌خواهید اشکال‌زدایی کنید روی سیستم هدف (target) قرار دهید. در صورت نیاز می‌توان نمادهای برنامه را پاک‌سازی (strip) کرد تا در فضا صرفه‌جویی شود، چرا که \&\fBgdbserver\fR اهمیتی به نمادها (symbols) نمی‌دهد. تمام پردازش و مدیریت نمادها توسط GDB که روی سیستم میزبان (host) اجرا می‌شود، انجام می‌گیرد. .PP برای استفاده از سرور، به سیستم هدف وارد شده و برنامهٔ \fBgdbserver\fR را اجرا کنید. باید به آن مشخص کنید: (الف) چگونه با GDB ارتباط برقرار کند، (ب) نام برنامهٔ شما چیست، و (پ) آرگومان‌های آن. نحو کلی دستور به این صورت است: .PP .Vb 1 \& target> gdbserver [ ...] .Ve .PP برای مثال، با استفاده از یک درگاه سریال، می‌توانید بنویسید: .PP .Vb 1 \& target> gdbserver /dev/com1 emacs foo.txt .Ve .PP این دستور به \fBgdbserver\fR اعلام می‌کند که emacs را با آرگومان foo.txt اشکال‌زدایی کند و از طریق \fI/dev/com1\fR با GDB ارتباط برقرار نماید. اکنون \fBgdbserver\fR منتظر می‌ماند تا GDB میزبان با آن ارتباط برقرار کند. .PP برای استفاده از یک اتصال TCP، می‌توانید چنین بنویسید: .PP .Vb 1 \& target> gdbserver host:2345 emacs foo.txt .Ve .PP این دستور تقریباً همان کار مثال قبلی را انجام می‌دهد، با این تفاوت که قرار است با GDB موجود در \f(CW\*(C`host\*(C'\fR از طریق TCP ارتباط برقرار کنیم. آرگومان \f(CW\*(C`host:2345\*(C'\fR به این معنی است که ما منتظر یک اتصال TCP از جانب \f(CW\*(C`host\*(C'\fR به درگاه محلی 2345 پروتکل TCP هستیم. (در حال حاضر، بخش \f(CW\*(C`host\*(C'\fR نادیده گرفته می‌شود.) شما می‌توانید هر شماره‌ای را که می‌خواهید برای شمارهٔ پورت انتخاب کنید، مادامی که با هیچ درگاه TCP دیگری روی سیستم هدف تداخل نداشته باشد. همین شماره درگاه باید در دستور \f(CW\*(C`target remote\*(C'\fR در GDB میزبان استفاده شود، که به‌زودی شرح داده خواهد شد. توجه داشته باشید اگر شماره درگاهی را انتخاب کنید که با سرویس دیگری تداخل دارد، \fBgdbserver\fR پیام خطایی چاپ کرده و خارج می‌شود. .PP همچنین \&\fBgdbserver\fR می‌تواند به برنامه‌های در حال اجرا متصل شود (attach کند). این کار از طریق آرگومان \fB\-\-attach\fR انجام می‌شود. نحو دستور به این صورت است: .PP .Vb 1 \& target> gdbserver \-\-attach .Ve .PP \&\fIpid\fR شناسهٔ فرآیند (Process ID) یک فرآیند در حال اجرای فعلی است. نیازی نیست که \fBgdbserver\fR را به فایل باینریِ فرآیند در حال اجرا ارجاع دهید. .PP برای اجرای \f(CW\*(C`gdbserver\*(C'\fR بدون ارائهٔ یک دستور اولیه جهت اجرا یا یک شناسهٔ فرآیند جهت اتصال، از گزینهٔ خط فرمان \fB\-\-multi\fR استفاده کنید. در چنین حالتی باید با استفاده از دستور \f(CW\*(C`target extended\-remote\*(C'\fR متصل شوید تا برنامه‌ای را که قصد اشکال‌زدایی آن را دارید آغاز کنید. .PP .Vb 1 \& target> gdbserver \-\-multi .Ve .PP شیوهٔ استفاده (سمت میزبان): .PP شما به یک نسخهٔ پاک‌سازی‌نشده (unstripped) از برنامهٔ هدف روی سیستم میزبان خود نیاز دارید، چرا که GDB باید جدول‌های نمادها و موارد مشابه آن را بررسی کند. برنامهٔ GDB را همانند همیشه با قرار دادن برنامهٔ هدف به عنوان آرگومان اول اجرا کنید. (اگر خط سریال با سرعتی غیر از 9600 باود کار می‌کند، ممکن است لازم باشد از گزینهٔ \&\fB\-\-baud\fR استفاده نمایید.) یعنی به صورت \f(CW\*(C`gdb TARGET\-PROG\*(C'\fR یا \f(CW\*(C`gdb \-\-baud BAUD TARGET\-PROG\*(C'\fR. پس از آن، تنها دستور جدیدی که باید بدانید \f(CW\*(C`target remote\*(C'\fR (یا \f(CW\*(C`target extended\-remote\*(C'\fR) است. آرگومان آن یا نام یک دستگاه است (معمولاً یک دستگاه سریال، مانند \fI/dev/ttyb\fR)، یا یک توصیف‌گر \f(CW\*(C`HOST:PORT\*(C'\fR. برای مثال: .PP .Vb 1 \& (gdb) target remote /dev/ttyb .Ve .PP از طریق خط سریال \fI/dev/ttyb\fR با سرور ارتباط برقرار می‌کند، و: .PP .Vb 1 \& (gdb) target remote the\-target:2345 .Ve .PP از طریق یک اتصال TCP به درگاه 2345 روی میزبان `the\-target` ارتباط برقرار می‌نماید، جایی که پیش‌تر \fBgdbserver\fR را با همان شماره پورت اجرا کرده‌اید. توجه داشته باشید که برای اتصالات TCP، حتماً باید پیش از استفاده از دستور `target remote` برنامهٔ \fBgdbserver\fR را اجرا کرده باشید، در غیر این صورت ممکن است با خطایی شبیه به `Connection refused` مواجه شوید. .PP همچنین \&\fBgdbserver\fR می‌تواند چندین فرآیند تحت اشکال‌زدایی (inferiors) را به طور همزمان اشکال‌زدایی کند، همان‌طور که در مستندات GDB در گره \f(CW\*(C`Inferiors Connections and Programs\*(C'\fR \-\- دستور پوستهٔ \f(CW\*(C`info \-f gdb \-n \*(AqInferiors Connections and Programs\*(Aq\*(C'\fR \-\- توصیف شده است. در چنین مواردی از نوع دیگر دستور GDB یعنی \f(CW\*(C`extended\-remote\*(C'\fR استفاده کنید: .PP .Vb 1 \& (gdb) target extended\-remote the\-target:2345 .Ve .PP گزینهٔ \fB\-\-multi\fR در \fBgdbserver\fR ممکن است در چنین شرایطی استفاده شود یا نشود..SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" سه حالت مختلف برای فراخوانی \fBgdbserver\fR وجود دارد: .IP \(bu 4 اشکال‌زدایی یک برنامه مشخص با تعیین نام برنامه آن: .Sp .Vb 1 \& gdbserver [...] .Ve .Sp پارامتر \fIcomm\fR نحوه ارتباط کارگزار با GDB را مشخص می‌کند؛ این مقدار یا نام یک دستگاه است (برای استفاده از خط سریال)، یک شماره درگاه TCP (\f(CW\*(C`:1234\*(C'\fR)، یا \f(CW\*(C`\-\*(C'\fR یا \f(CW\*(C`stdio\*(C'\fR برای استفاده از stdin/stdout در \f(CW\*(C`gdbserver\*(C'\fR. نام برنامه‌ای که قرار است اشکال‌زدایی شود را در \fIprog\fR مشخص کنید. هر آرگومان باقی‌مانده عیناً به برنامه ارسال خواهد شد. هنگامی که برنامه خارج شود، GDB اتصال را قطع خواهد کرد و \f(CW\*(C`gdbserver\*(C'\fR خارج می‌شود. .IP \(bu 4 اشکال‌زدایی یک برنامه مشخص با تعیین شناسه فرایند (PID) یک برنامه در حال اجرا: .Sp .Vb 1 \& gdbserver \-\-attach .Ve .Sp پارامتر \fIcomm\fR همان‌طور که در بالا توضیح داده شد عمل می‌کند. شناسه فرایند برنامه در حال اجرا را در \fIpid\fR ارائه دهید؛ GDB باقی کارها را انجام خواهد داد. مانند حالت قبل، هنگامی که فرایند \fIpid\fR خاتمه یابد، GDB اتصال را بسته و \f(CW\*(C`gdbserver\*(C'\fR خارج می‌شود. .IP \(bu 4 حالت چندفرایندی \-\- اشکال‌زدایی بیش از یک برنامه/فرایند: .Sp .Vb 1 \& gdbserver \-\-multi .Ve .Sp در این حالت، GDB می‌تواند به \fBgdbserver\fR دستور دهد که کدام دستور(ها) را اجرا کند. برخلاف ۲ حالت دیگر، وقتی یک فرایند در حال اشکال‌زدایی خاتمه یابد، GDB اتصال را نمی‌بندد؛ بنابراین می‌توانید چند فرایند را در یک نشست مشترک اشکال‌زدایی کنید. .PP در هر یک از این حالت‌ها می‌توانید این گزینه‌ها را مشخص کنید: .IP \fB\-\-help\fR 4 .IX Item "--help" فهرست کردن تمام گزینه‌ها، همراه با توضیحات کوتاه. .IP \fB\-\-version\fR 4 .IX Item "--version" این گزینه باعث می‌شود \fBgdbserver\fR شماره نسخه خود را چاپ کرده و خارج شود. .IP \fB\-\-attach\fR 4 .IX Item "--attach" \&\fBgdbserver\fR به یک برنامه در حال اجرا متصل (attach) خواهد شد. نحو دستور چنین است: .Sp .Vb 1 \& target> gdbserver \-\-attach .Ve .Sp \&\fIpid\fR شناسه فرایند یک فرایند در حال اجراست. نیازی نیست که \fBgdbserver\fR را به فایل باینری فرایند در حال اجرا هدایت کنید. .IP \fB\-\-multi\fR 4 .IX Item "--multi" برای راه‌اندازی \f(CW\*(C`gdbserver\*(C'\fR بدون ارائه دستور اولیه برای اجرا یا شناسه فرایند برای اتصال، از این گزینه خط فرمان استفاده کنید. سپس می‌توانید با استفاده از \f(CW\*(C`target extended\-remote\*(C'\fR متصل شوید و برنامه‌ای را که می‌خواهید اشکال‌زدایی کنید، آغاز نمایید. نحو دستور چنین است: .Sp .Vb 1 \& target> gdbserver \-\-multi .Ve .IP \fB\-\-debug\fR[\fB=option1,option2,...\fR] 4 .IX Item "--debug[=option1,option2,...]" دستور به \f(CW\*(C`gdbserver\*(C'\fR برای نمایش اطلاعات وضعیت اضافی درباره فرایند اشکال‌زدایی. این گزینه برای توسعه \f(CW\*(C`gdbserver\*(C'\fR و گزارش باگ‌ها به توسعه‌دهندگان در نظر گرفته شده است. .Sp هر \fIoption\fR نام مؤلفه‌ای است که باید اشکال‌زدایی برای آن فعال شود. فهرست گزینه‌های ممکن عبارت است از: \fBall\fR، \&\fBthreads\fR، \fBevent-loop\fR و \fBremote\fR. گزینه ویژه \fBall\fR همه مؤلفه‌ها را فعال می‌کند. فهرست گزینه‌ها از چپ به راست پردازش می‌شود، و می‌توان پیش از یک گزینه نویسه \&\f(CW\*(C`\-\*(C'\fR را قرار داد تا خروجی آن مؤلفه غیرفعال شود؛ بنابراین می‌توانید بنویسید: .Sp .Vb 1 \& target> gdbserver \-\-debug=all,\-event\-loop .Ve .Sp تا خروجی اشکال‌زدایی برای همه مؤلفه‌ها به جز \fBevent-loop\fR فعال شود. اگر هیچ گزینه‌ای به \fB\-\-debug\fR داده نشود، معادل \fB\-\-debug=threads\fR در نظر گرفته می‌شود. این رفتار ممکن است در نسخه‌های آینده \f(CW\*(C`gdbserver\*(C'\fR تغییر کند. .IP \fB\-\-debug\-file=\fR\fIfilename\fR 4 .IX Item "--debug-file=filename" دستور به \f(CW\*(C`gdbserver\*(C'\fR برای ارسال تمام خروجی‌های اشکال‌زدایی به \fIfilename\fR داده‌شده. این گزینه برای توسعه \f(CW\*(C`gdbserver\*(C'\fR و گزارش باگ‌ها به توسعه‌دهندگان در نظر گرفته شده است. .IP \fB\-\-debug\-format=option1\fR[\fB,option2,...\fR] 4 .IX Item "--debug-format=option1[,option2,...]" دستور به \f(CW\*(C`gdbserver\*(C'\fR برای گنجاندن اطلاعات اضافی در هر سطر از خروجی اشکال‌زدایی. .IP \fB\-\-wrapper\fR 4 .IX Item "--wrapper" مشخص کردن یک پوشش‌دهنده (wrapper) برای اجرای برنامه‌ها جهت اشکال‌زدایی. پس از این گزینه باید نام wrapper، سپس هرگونه آرگومان خط فرمانی که باید به wrapper ارسال شود، و سپس \&\f(CW\*(C`\-\-\*(C'\fR بیاید که نشان‌دهنده پایان آرگومان‌های wrapper است. .IP \fB\-\-once\fR 4 .IX Item "--once" به‌طور پیش‌فرض، \fBgdbserver\fR درگاه TCP شنوا را باز نگه می‌دارد تا اتصالات بعدی امکان‌پذیر باشند. با این حال، اگر \f(CW\*(C`gdbserver\*(C'\fR را با گزینه \fB\-\-once\fR اجرا کنید، پس از برقراری اتصال به نخستین نشست GDB، گوش دادن به هرگونه تلاش بیشتر برای اتصال را متوقف خواهد کرد..SH "محیط (ENVIRONMENT)" .IX Header "ENVIRONMENT" .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" مستندات کامل GDB به عنوان یک راهنمای Texinfo نگهداری می‌شود. اگر برنامه‌های \f(CW\*(C`info\*(C'\fR و \f(CW\*(C`gdb\*(C'\fR و همچنین مستندات Texinfo مربوط به GDB به‌درستی روی سیستم شما نصب شده باشند، دستور .PP .Vb 1 \& info gdb .Ve .PP باید دسترسی شما به راهنمای کامل را فراهم کند. .PP \&\fIUsing GDB: A Guide to the GNU Source-Level Debugger\fR، Richard M. Stallman و Roland H. Pesch، ژوئیه ۱۹۹۱. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" کپی‌رایت (c) 1988\-2025 Free Software Foundation, Inc. .PP اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشر شده توسط بنیاد نرم‌افزار آزاد (Free Software Foundation) اعطا می‌شود؛ با بخش‌های تغییرناپذیر «Free Software» و «Free Software Needs Free Documentation»، با متن‌های روی جلد «A GNU Manual»، و با متن‌های پشت جلد طبق بند (a) در زیر. .PP (a) متن پشت جلد FSF عبارت است از: «شما در کپی‌کردن و تغییر دادن این راهنمای گنو آزاد هستید. خرید نسخه‌ها از GNU Press، از FSF در توسعه گنو و ترویج آزادی نرم‌افزار پشتیبانی می‌کند.»