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

vgdb - واسط میان Valgrind و GDB یا پوسته

vgdb [گزینه‌ها]

vgdb («Valgrind to GDB») به‌عنوان یک واسط میان Valgrind و GDB یا یک پوسته (شل) استفاده می‌شود. این ابزار دارای سه حالت استفاده است:

1.به‌عنوان یک ابزار مستقل، از خط فرمان پوسته برای ارسال دستورات پایش (monitor) به فرایندی که تحت Valgrind اجرا می‌شود به کار می‌رود. برای این کاربرد، پس از گزینه(های) vgdb باید دستور پایش مورد نظر جهت ارسال قرار گیرد. برای ارسال بیش از یک دستور، آن‌ها را با گزینه -c از یکدیگر جدا کنید.
2.در ترکیب با دستور «target remote |» در GDB، به‌عنوان برنامه بازپخش (relay) میان GDB و Valgrind gdbserver استفاده می‌شود. برای این حالت استفاده، فقط گزینه‌(ها) مجاز هستند و هیچ دستوری نباید داده شود.
3.در حالت --multi ، vgdb از پروتکل توسعه‌یافته ریموت (extended remote protocol) برای برقراری ارتباط با GDB استفاده می‌کند. این ویژگی به شما امکان می‌دهد خروجی‌های هر دو برنامه valgrind و GDB را در نشست GDB مشاهده کنید. این کار از طریق دستور «target extended-remote | vgdb --multi» میسر می‌شود. در این حالت دیگر نیازی به اجرای دستی valgrind توسط خودتان نیست؛ vgdb به محض اینکه gdb دستور اجرای برنامه جدید را بدهد، valgrind را راه‌اندازی می‌کند. برای این حالت استفاده، گزینه‌های vgdb همچنین می‌توانند شامل --valgrind و --vargs باشند تا چگونگی راه‌اندازی valgrind را توصیف کنند.

--pid=<number>

شناسه فرایند (PID) فرایندی را که vgdb باید به آن متصل شود مشخص می‌کند. این گزینه در شرایطی مفید است که بیش از یک Valgrind gdbserver برای اتصال در دسترس باشد. اگر آرگومان --pid داده نشود و چندین فرایند Valgrind gdbserver در حال اجرا باشند، vgdb فهرست چنین فرایندهایی را گزارش کرده و سپس خارج می‌شود.

--vgdb-prefix

اگر می‌خواهید پیشوند پیش‌فرض FIFOها (لوله‌های نام‌گذاری‌شده) مورد استفاده برای ارتباط میان Valgrind gdbserver و vgdb را تغییر دهید، باید این گزینه را هم به Valgrind و هم به vgdb بدهید.

--wait=<number>

به vgdb دستور می‌دهد به مدت تعداد ثانیه‌های تعیین‌شده به دنبال Valgrind gdbserverهای در دسترس بگردد. این ویژگی امکان اجرای فرایند vgdb را پیش از راه‌اندازی Valgrind gdbserver مورد نظری که قصد ارتباط با آن را دارید فراهم می‌سازد. این گزینه در صورت استفاده همراه با یک --vgdb-prefix یکتا برای فرایندی که می‌خواهید منتظر آن بمانید بسیار سودمند است. همچنین اگر از آرگومان --wait در دستور «target remote» در GDB استفاده می‌کنید، باید remotetimeout را در GDB به مقداری بزرگ‌تر از مقدار آرگومان --wait تنظیم کنید. برای مثالی از تنظیم مقدار remotetimeout، گزینه --max-invoke-ms (در ادامه) را ببینید.

--max-invoke-ms=<number>

تعداد میلی‌ثانیه‌هایی را مشخص می‌کند که پس از آن vgdb فراخوانی gdbserver تعبیه‌شده در Valgrind را اجباری می‌کند. مقدار پیش‌فرض ۱۰۰ میلی‌ثانیه است. مقدار ۰ فراخوانی اجباری را غیرفعال می‌کند. فراخوانی اجباری زمانی به کار می‌رود که vgdb به یک Valgrind gdbserver متصل باشد و تمام ریسه‌های (threads) فرایند Valgrind در یک فراخوانی سیستمی (system call) مسدود (blocked) شده باشند.

اگر مقدار بزرگی تعیین کنید، ممکن است لازم باشد مقدار «remotetimeout» را در GDB از مقدار پیش‌فرض ۲ ثانیه افزایش دهید. باید مطمئن شوید که مهلت زمانی (برحسب ثانیه) از مقدار --max-invoke-ms بزرگ‌تر باشد. برای مثال، برای --max-invoke-ms=5000، دستور زیر در GDB مناسب است:

(gdb) set remotetimeout 6

--cmd-time-out=<number>

به یک vgdb مستقل دستور می‌دهد در صورتی که Valgrind gdbserver متصل‌شده دستوری را در تعداد ثانیه‌های مشخص‌شده پردازش نکند، خارج شود. مقدار پیش‌فرض این است که هرگز منقضی نشود.

--port=<portnr>

به vgdb دستور می‌دهد به‌جای استفاده از پایپ برای برقراری ارتباط با GDB، از پروتکل tcp/ip استفاده کرده و روی شماره پورت مشخص‌شده منتظر GDB بماند. استفاده از tcp/ip امکان اجرای GDB روی یک رایانه و اشکال‌زدایی فرایند Valgrind در حال اجرا روی یک رایانه مقصد دیگر را فراهم می‌کند. مثال:
# در رایانه مقصد، برنامه خود را تحت valgrind اجرا کنید با:
valgrind --vgdb-error=0 prog
# و سپس در یک پوسته دیگر، اجرا کنید:
vgdb --port=1234

در رایانه‌ای که میزبان GDB است، این دستور را اجرا کنید:

gdb prog
(gdb) target remote targetip:1234

که در آن targetip آدرس IP یا نام میزبان رایانه مقصد است.

--vgdb-multi

باعث می‌شود vgdb در حالت extended-remote آغاز شده و منتظر بماند تا gdb برنامه اجرایی را مشخص کند.

--valgrind

مسیر باینری valgrind جهت استفاده در حالت extended-remote. در صورت عدم تعیین، نسخه valgrind سیستمی راه‌اندازی خواهد شد.

--vargs

گزینه‌های اجرای valgrind در حالت extended-remote؛ به‌عنوان مثال -q. هر آنچه پس از --vargs بیاید، عیناً به‌عنوان آرگومان به valgrind ارسال می‌شود.

-c

برای ارسال بیش از یک دستور به vgdb مستقل، دستورات را با گزینه -c از یکدیگر جدا کنید. مثال:
vgdb v.set log_output -c leak_check any

-l

به یک vgdb مستقل دستور می‌دهد فهرست فرایندهای در حال اجرای Valgrind gdbserver را گزارش کرده و سپس خارج شود.

-T

به vgdb دستور می‌دهد به پیام‌های اطلاعاتی vgdb برچسب زمان (timestamp) بیفزاید.

-D

به یک vgdb مستقل دستور می‌دهد وضعیت حافظه اشتراکی استفاده‌شده توسط Valgrind gdbserver را نمایش دهد. vgdb پس از نمایش وضعیت حافظه اشتراکی Valgrind gdbserver خارج خواهد شد.

-d

به vgdb دستور می‌دهد خروجی اشکال‌زدایی تولید کند. برای افزایش جزئیات خروجی، چند بار آرگومان -d را وارد کنید. هنگام ارسال -d به یک vgdb بازپخش (relay)، بهتر است خروجی خطای استاندارد (stderr) مربوط به vgdb را به یک فایل تغییر مسیر (redirect) دهید تا از تداخل میان خروجی اشکال‌زدایی vgdb و GDB جلوگیری شود.

valgrind(1), $INSTALL/share/doc/valgrind/html/index.html یا http://www.valgrind.org/docs/manual/index.html,

Debugging your program using Valgrind's gdbserver and GDB[1] vgdb[2], Valgrind monitor commands[3].

Philippe Waroquiers.

1.
Debugging your program using Valgrind's gdbserver and GDB
2.
vgdb
3.
Valgrind monitor commands
08/11/2026 Release 3.25.1