.\" -*- 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 \- سرور راه دور برای اشکال‌زدای گنو .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 ابتدا باید یک نسخه از برنامه‌ای را که می‌خواهید اشکال‌زدایی کنید روی سامانهٔ هدف قرار دهید. در صورت نیاز می‌توان نمادهای برنامه را پاک کرد (stripped) تا فضا صرفه‌جویی شود، چرا که \&\fBgdbserver\fR به جدول نمادها نیازی ندارد. تمامی پردازش‌های مربوط به نمادها توسط GDB در حال اجرا روی سامانهٔ میزبان انجام می‌شود. .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 به درگاه محلی 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 شناسهٔ فرایند یک فرایند در حال اجرا است. نیازی نیست \&\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 را راه‌اندازی کنید، در حالی که برنامهٔ هدف نخستین آرگومان آن باشد. (در صورتی که خط ارتباط سریال با سرعتی غیر از ۹۶۰۰ باود کار می‌کند، ممکن است نیاز به استفاده از گزینهٔ \&\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 با درگاه ۲۳۴۵ روی میزبان `the\-target'، یعنی جایی که پیش‌تر \&\fBgdbserver\fR را با همان شماره درگاه راه‌اندازی کرده بودید، ارتباط برقرار می‌سازد. توجه داشته باشید که برای اتصالات TCP، باید \fBgdbserver\fR را پیش از به‌کارگیری دستور `target remote' اجرا کنید، در غیر این صورت ممکن است با خطایی شبیه به `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 به یک برنامهٔ در حال اجرا متصل خواهد شد. ساختار به‌صورت زیر است: .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" کپی‌رایت \(co ۱۹۸۸\-۲۰۲۵ متعلق به 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 در توسعه گنو و ارتقای آزادی نرم‌افزار پشتیبانی می‌کند.»