| WINEDBG(1) | Wine Developers Manual | WINEDBG(1) |
نام (NAME)
winedbg - اشکالزدای Wine
خلاصه دستور (SYNOPSIS)
winedbg [ options ] [ program_name [ program_arguments ] | wpid ]
winedbg --gdb [ options ] [ program_name [ program_arguments ] | wpid ]
winedbg --auto wpid
winedbg --minidump [ file.mdmp ] wpid
winedbg file.mdmp
توضیحات (DESCRIPTION)
winedbg یک اشکالزدا برای Wine است. این ابزار امکانات زیر را فراهم میکند:
-
اشکالزدایی
برنامههای
بومی Win32
-
اشکالزدایی
برنامههای
Winelib
- جایگزینی
مستقیم
برای Dr Watson
حالتها (MODES)
winedbg میتواند در پنج حالت مختلف استفاده شود. اولین آرگومان برنامه تعیینکننده حالتی است که winedbg در آن اجرا خواهد شد.
- default
- بدون هیچ حالت صریحی، این حالت عملیاتی استاندارد winedbg است. winedbg به عنوان رابط کاربری (front end) برای کاربر عمل خواهد کرد.
- --gdb
- ابزار winedbg به عنوان یک پراکسی برای gdb استفاده خواهد شد. gdb رابط کاربری برای مدیریت دستورها خواهد بود و winedbg تمام درخواستهای اشکالزدایی را از gdb به APIهای Win32 بازگردانی (proxy) خواهد کرد.
- --auto
- این حالت زمانی استفاده میشود که winedbg در مدخل رجیستری AeDebug به عنوان اشکالزدای پیشفرض تنظیم شده باشد. در این صورت، winedbg اطلاعات اولیهای دربارهٔ یک خرابی یا فروپاشی (crash) نمایش میدهد. این حالت برای کاربرانی مفید است که قصد اشکالزدایی خرابی را ندارند، بلکه میخواهند اطلاعات مربوط به خرابی را جهت ارسال به توسعهدهندگان جمعآوری کنند.
- --minidump
- این حالت مشابه حالت --auto است، با این تفاوت که به جای چاپ اطلاعات بر روی صفحه نمایش (همانند کاری که --auto انجام میدهد)، اطلاعات در یک فایل minidump ذخیره میشود. نام فایل یا از طریق خط فرمان ارسال میشود یا در صورت مشخص نشدن، توسط WineDbg تولید میگردد. این فایل بعداً میتواند برای بررسی بیشتر دوباره در winedbg بارگذاری شود.
- file.mdmp
- در این حالت، winedbg وضعیت فرآیند تحت اشکالزدایی (debuggee) را که در یک فایل minidump ذخیره شده است، دوباره بارگذاری میکند. دستور minidump در ادامه یا حالت --minidump را ببینید.
گزینهها (OPTIONS)
در حالت default، گزینههای زیر در دسترس هستند:
- --command string
- winedbg دستور string را طوری اجرا میکند که گویی در خط فرمان winedbg تایپ شده است، و سپس خارج میشود. این ویژگی میتواند برای دریافت pid فرآیندهای در حال اجرا مفید باشد (winedbg --command "info proc").
- --exec filename
- نام فایل اجرایی را بدون شروع اجرای آن تنظیم میکند.
- --file filename
- winedbg فهرست دستورهای موجود در فایل filename را طوری اجرا میکند که گویی در خط فرمان winedbg وارد شدهاند، و سپس خارج میشود.
در حالت پراکسی gdb، گزینههای زیر در دسترس هستند:
- --no-start
- برنامهٔ gdb را مستقیماً اجرا نکن؛ در عوض، دستور target remote مربوط به GDB را برای اجرا چاپ کن و منتظر اتصال از هر اشکالزدای سازگار با GDB بمان. به طور معمول، --gdb هم کارساز پراکسی اشکالزدایی و هم یک نمونه از gdb را برای رابط کاربری راهاندازی میکند. این گزینه به winedbg دستور میدهد تا از اجرای gdb صرفنظر کند و در عوض دستوری از GDB را که میتوان برای اتصال دستی به کارساز استفاده کرد، چاپ نماید. این دستور به این صورت است:
- target remote localhost:<port>
که در آن <port> درگاه TCP است که کارساز پراکسی اشکالزدایی winedbg به آن متصل شده است.
- این گزینه به کاربر امکان میدهد gdb را با واسط کاربری اشکالزدایی دیگری مانند ddd، kgdb، gdbgui یا Qt Creator جایگزین کند. بدون در نظر گرفتن اینکه --no-start مشخص شده باشد یا خیر، winedbg پس از قطع شدن اولین اتصال (برای مثال، هنگامی که gdb از فرآیند تحت اشکالزدایی جدا میشود) خارج خواهد شد.
- --port port
- کارساز پراکسی اشکالزدایی GDB را روی درگاه مشخصشده راهاندازی میکند. اگر این گزینه مشخص نشده باشد، winedbg به سیستمعامل اجازه میدهد تا هر درگاه در دسترسی را انتخاب کند. این گزینه میتواند همراه با --no-start برای تعیین درگاهی که کارساز باید به آن متصل شود استفاده شود.
- --with-xterm
- این گزینه رابط کاربری gdb را به جای استفاده از ترمینال فعلی یونیکس، در یک پنجرهٔ جدید xterm(1) اجرا میکند. در صورت مشخص شدن --no-start، این گزینه نادیده گرفته میشود.
در تمام حالتها، بخش باقیماندهٔ خط فرمان (در صورت ارسال) برای مشخص کردن برنامهای که قرار است اشکالزدایی شود، به کار میرود:
- program_name
- نام یک فایل اجرایی برای شروع یک نشست اشکالزدایی است. winedbg در عمل با استفاده از این فایل اجرایی یک فرآیند ایجاد میکند. اگر program_arguments نیز ارائه شده باشند، به عنوان آرگومانهای ایجاد فرآیند تحت اشکالزدایی استفاده خواهند شد.
- wpid
- winedbg به فرآیندی که pid ویندوزی آن wpid است، متصل خواهد شد. از دستور info proc درون winedbg برای فهرست کردن فرآیندهای در حال اجرا و pidهای ویندوزی آنها استفاده کنید.
- default
- اگر چیزی مشخص نشده باشد، بدون اجرای هیچ برنامهای و بدون اتصال به هیچ فرآیندی وارد اشکالزدا میشوید. باید خودتان مراحل لازم را انجام دهید..SH "دستورات (COMMANDS)"
حالت پیشفرض، و هنگام بارگذاری مجدد فایل minidump:
بیشتر دستورات بهکاررفته در winedbg مشابه دستورات gdb هستند. لطفاً برای جزئیات بیشتر به مستندات gdb مراجعه کنید. بخش gdb differences را در ادامه برای فهرستی از تفاوتها با دستورات gdb ببینید.
دستورات متفرقه
مدیریت فرآیند
- attach N
- به یک فرآیند Wine متصل میشود (N شناسه ویندوزی آن، به صورت عددی یا هگزادسیمال است). شناسهها را میتوان با استفاده از دستور info process به دست آورد. توجه داشته باشید که دستور info process مقادیر را به صورت هگزادسیمال برمیگرداند.
- attach file.mdmp
- وضعیت برنامه در حال دیباگ را از فایل minidump با نام file.mdmp بارگذاری مجدد میکند. برای ذخیره چنین فایلی دستور minidump را ببینید.
- detach
- از فرآیند فعلی Wine جدا میشود. فرآیند دیگر توسط WineDbg دیباگ نمیشود، اما همچنان در حال اجرا باقی میماند (برای اهداف زنده).
- kill
- فرآیند فعلی Wine را خاتمه میدهد (میکشد). فرآیند دیگر توسط WineDbg دیباگ نمیشود و همچنین متوقف میگردد (برای اهداف زنده).
- minidump file.mdmp
- زمینه (context) دیباگ فرآیند تحت دیباگ را در یک فایل minidump به نام file.mdmp ذخیره میکند.
- run
- همان فرآیند را با همان آرگومانها مجدداً اجرا میکند. توجه: تمامی نقاط توقف (breakpoints) فرآیند قبلی دیگر در دسترس نخواهند بود.
- run arg1 arg2...
- همان فرآیند را با آرگومانهای arg1 arg2... مجدداً اجرا میکند. توجه: تمامی نقاط توقف فرآیند قبلی دیگر در دسترس نخواهند بود.
- thread N
- ریسه (thread) فعلی را به N تغییر میدهد (N شناسه TID ویندوزی آن، به صورت عددی یا هگزادسیمال است).
دستورات راهنما
دستورات کنترل جریان
- cont
- اجرا را تا نقطه توقف یا استثنای (exception) بعدی ادامه میدهد.
- pass
- رویداد استثنا را به زنجیره فیلترها (filter chain) ارسال میکند.
- step
- اجرا را تا خط بعدی کد C ادامه میدهد (وارد فراخوانی تابع میشود).
- next
- اجرا را تا خط بعدی کد C ادامه میدهد (وارد فراخوانی تابع نمیشود).
- stepi
- دستورالعمل اسمبلی بعدی را اجرا میکند (وارد فراخوانی تابع میشود).
- nexti
- دستورالعمل اسمبلی بعدی را اجرا میکند (وارد فراخوانی تابع نمیشود).
- finish
- اجرا را تا رسیدن به بازگشت (return) تابع فعلی ادامه میدهد.
دستورات cont، step، next، stepi و nexti میتوانند با یک عدد (N) پسوند شوند، به این معنا که پیش از بازگرداندن کنترل به کاربر، دستور باید N بار اجرا شود.
نقاط توقف، نقاط نظارت (Breakpoints, watchpoints)
- enable N
- نقطه (توقف|نظارت) شماره N را فعال میکند.
- disable N
- نقطه (توقف|نظارت) شماره N را غیرفعال میکند.
- delete N
- نقطه (توقف|نظارت) شماره N را حذف میکند.
- cond N
- هرگونه شرط موجود برای نقطه (توقف|نظارت) شماره N را حذف میکند.
- cond N expr
- شرط expr را به نقطه (توقف|نظارت) شماره N اضافه میکند. عبارت expr هر بار که به نقطه (توقف|نظارت) برخورد شود ارزیابی خواهد شد. اگر نتیجه ارزیابی صفر باشد، نقطه توقف تحریک نمیشود.
- break * N
- یک نقطه توقف در آدرس N اضافه میکند.
- break id
- یک نقطه توقف در آدرس نماد id اضافه میکند.
- break id N
- یک نقطه توقف در خط N درون نماد id اضافه میکند.
- break N
- یک نقطه توقف در خط N از فایل مبدأ فعلی اضافه میکند.
- break
- یک نقطه توقف در آدرس فعلی $PC اضافه میکند.
- watch * N
- یک دستور نظارت (هنگام نوشتن) در آدرس N (به طول ۴ بایت) اضافه میکند.
- watch id
- یک دستور نظارت (هنگام نوشتن) در آدرس نماد id اضافه میکند. اندازه به اندازه نماد id بستگی دارد.
- rwatch * N
- یک دستور نظارت (هنگام خواندن) در آدرس N (به طول ۴ بایت) اضافه میکند.
- rwatch id
- یک دستور نظارت (هنگام خواندن) در آدرس نماد id اضافه میکند. اندازه به اندازه نماد id بستگی دارد.
- info break
- فهرستی از تمامی نقاط (توقف|نظارت) را (همراه با وضعیت آنها) نمایش میدهد.
میتوانید از نماد EntryPoint برای اشاره به نقطه ورود Dll استفاده کنید.
هنگام تنظیم یک نقطه (توقف|نظارت) با id، اگر نماد پیدا نشود (برای مثال، نماد در ماژولی باشد که هنوز بارگذاری نشده است)، winedbg نام نماد را به خاطر سپرده و هر بار که ماژول جدیدی بارگذاری شود برای تنظیم نقطه توقف تلاش میکند (تا زمانی که موفق شود).
دستکاری پشته (Stack)
- bt
- پشته فراخوانی ریسه فعلی را چاپ میکند.
- bt N
- پشته فراخوانی ریسه با شناسه N را چاپ میکند. توجه: این کار موقعیت فریم فعلی را که توسط دستورهای up و dn تغییر میکند، عوض نمیکند.
- up
- در پشته ریسه فعلی یک فریم به بالا میرود.
- up N
- در پشته ریسه فعلی به اندازه N فریم به بالا میرود.
- dn
- در پشته ریسه فعلی یک فریم به پایین میآید.
- dn N
- در پشته ریسه فعلی به اندازه N فریم به پایین میآید.
- frame N
- فریم شماره N را به عنوان فریم فعلی برای پشته ریسه فعلی تنظیم میکند.
- info locals
- اطلاعات مربوط به متغیرهای محلی را برای فریم تابع فعلی چاپ میکند.
مدیریت دایرکتوری و فایل مبدأ
- show dir
- فهرست دایرکتوریهایی را که فایلهای مبدأ در آنها جستجو میشوند چاپ میکند.
- dir pathname
- مسیر pathname را به فهرست دایرکتوریهای جستجوی فایلهای مبدأ اضافه میکند.
- dir
- فهرست دایرکتوریهای جستجوی فایلهای مبدأ را پاک میکند.
- symbolfile pathname
- فایل تعریف نماد خارجی pathname را بارگذاری میکند.
- symbolfile pathname N
- فایل تعریف نماد خارجی pathname را بارگذاری میکند (با اعمال یک آفست N بر روی آدرسها).
- list
- ۱۰ خط مبدأ را رو به جلو از موقعیت فعلی فهرست میکند.
- list -
- ۱۰ خط مبدأ را رو به عقب از موقعیت فعلی فهرست میکند.
- list N
- ۱۰ خط مبدأ را از خط N در فایل فعلی فهرست میکند.
- list pathname:N
- ۱۰ خط مبدأ را از خط N در فایل pathname فهرست میکند.
- list id
- ۱۰ خط مبدأ از تابع id را فهرست میکند.
- list * N
- ۱۰ خط مبدأ را از آدرس N فهرست میکند.
میتوانید برای تغییر مقدار ۱۰ خط، محدوده انتهایی را با استفاده از جداکننده ',' مشخص کنید. به عنوان مثال:
- list 123, 234
- خطوط مبدأ را از خط ۱۲۳ تا ۲۳۴ در فایل فعلی فهرست میکند.
- list foo.c:1,56
- خطوط مبدأ را از خط ۱ تا ۵۶ در فایل foo.c فهرست میکند.
نمایشها (Displaying)
یک display (نمایشگر) عبارتی است که پس از اجرای هر دستور winedbg ارزیابی شده و مقدار آن چاپ میشود.
- display
- info display
- فهرست نمایشهای فعال را نمایش میدهد.
- display expr
- یک نمایش برای عبارت expr اضافه میکند.
- display /fmt expr
- یک نمایش برای عبارت expr اضافه میکند. چاپ عبارت expr ارزیابیشده با استفاده از قالب ارائهشده انجام میشود (برای اطلاعات بیشتر درباره قالبها به print command مراجعه کنید).
- del display N
- undisplay N
- نمایش شماره N را حذف میکند.
دیساسمبلی (Disassembly)
- disas
- از موقعیت فعلی دیساسمبل میکند.
- disas expr
- از آدرس expr دیساسمبل میکند.
- disas expr,expr
- کدهای بین آدرسهای مشخصشده توسط دو عبارت را دیساسمبل میکند.
حافظه (خواندن، نوشتن، نوعبندی)
- x expr
- حافظه را در آدرس expr بازبینی میکند.
- x /fmt expr
- حافظه را در آدرس expr با استفاده از قالب fmt بازبینی میکند.
- print expr
- مقدار expr را چاپ میکند (احتمالاً با استفاده از نوع آن).
- print /fmt expr
- مقدار expr را چاپ میکند (احتمالاً با استفاده از نوع آن).
- set var = expr
- مقدار عبارت expr را در متغیر var مینویسد..IP whatis expr نوع C عبارت expr را چاپ میکند
- fmt
- یا بهصورت letter است یا count letter، که در آن letter میتواند یکی از موارد زیر باشد:
- s
- یک رشته ASCII
- u
- یک رشته یونیکد UTF16
- i
- دستورالعملها (دیساسمبل)
- x
- عدد صحیح هگزادسیمال ۳۲ بیتی بدون علامت
- d
- عدد صحیح دهدهی ۳۲ بیتی علامتدار
- w
- عدد صحیح هگزادسیمال ۱۶ بیتی بدون علامت
- c
- نویسه (تنها مقادیر قابل چاپ 0x20-0x7f عملاً چاپ میشوند)
- b
- عدد صحیح هگزادسیمال ۸ بیتی بدون علامت
- g
- شناسه Win32 GUID
عبارتها
عبارتها در دیباگر Wine عمدتاً به سبک زبان C نوشته میشوند. با این حال، چند تفاوت وجود دارد:
در عملیات تبدیل نوع (cast)، هنگام مشخص کردن یک struct یا union، باید از کلمه کلیدی struct یا union استفاده کنید (حتی اگر برنامه شما از یک typedef استفاده کند).
هنگام مشخص کردن یک شناسه، اگر چندین نماد با این نام وجود داشته باشد، دیباگر برای نمادی که میخواهید استفاده کنید از شما سوال خواهد کرد. نماد مورد نظر خود را از روی شماره آن انتخاب کنید.
اطلاعات درباره سازوکارهای داخلی Wine
- info class
- تمام کلاسهای Windows ثبتشده در Wine را فهرست میکند
- info class id
- اطلاعات مربوط به کلاس ویندوز id را چاپ میکند
- info share
- تمام کتابخانههای پویای بارگذاریشده در برنامه دیباگشونده (شامل فایلهای .so و DLLهای NE و PE) را فهرست میکند
- info share N
- اطلاعات مربوط به پیمانه واقع در نشانی N را چاپ میکند
- info regs
- مقدار ثباتهای پردازنده (CPU) را چاپ میکند
- info all-regs
- مقدار ثباتهای CPU و ممیز شناور (Floating Point) را چاپ میکند
- info segment
- تمام سگمنتهای تخصیصیافته را فهرست میکند (فقط i386)
- info segment N
- اطلاعات مربوط به سگمنت N را چاپ میکند (فقط i386)
- info stack
- مقادیر بالای پشته (stack) را چاپ میکند
- info map
- تمام نگاشتهای مجازی استفادهشده توسط برنامه دیباگشونده را فهرست میکند
- info map N
- تمام نگاشتهای مجازی استفادهشده توسط برنامه با pid ویندوزی N را فهرست میکند
- info wnd
- سلسلهمراتب پنجرهها را با شروع از پنجره میزکار نمایش میدهد
- info wnd N
- اطلاعات پنجره با دستگیره (handle) N را چاپ میکند
- info process
- تمام w-processها را در نشست Wine فهرست میکند
- info thread
- تمام w-threadها را در نشست Wine فهرست میکند
- info frame
- فریمهای استثنا را فهرست میکند (با شروع از فریم پشته کنونی). همچنین میتوانید بهعنوان یک آرگومان اختیاری، یک شناسه رشته را (بهجای رشته کنونی) برای بررسی فریمهای استثنای آن ارسال کنید.
پیامهای اشکالزدایی (دیباگ) را میتوان در حین دیباگ با استفاده از دستور set فعال و غیرفعال کرد، اما تنها برای کانالهایی که با متغیر محیطی WINEDEBUG مقداردهی اولیه شدهاند.
- set warn + win
- پیامهای warn را در کانال win فعال میکند
- set + win
- پیامهای warn/fixme/err/trace را در کانال win فعال میکند
- set - win
- پیامهای warn/fixme/err/trace را در کانال win غیرفعال میکند
- set fixme - all
- کلاس fixme را در تمام کانالها غیرفعال میکند
حالت Gdb:
برای مشاهده تمامی دستورهای gdb به مستندات gdb مراجعه کنید.
با این حال، چند افزونه Wine از طریق دستور monitor در دسترس است:
- monitor wnd
- تمام پنجرهها را در نشست Wine فهرست میکند
- monitor proc
- تمام پردازهها را در نشست Wine فهرست میکند
- monitor mem
- نگاشت حافظه پردازه دیباگشونده را نمایش میدهد
حالتهای Auto و minidump:
از آنجا که امکان ورودی کاربر وجود ندارد، هیچ دستوری در دسترس نیست.
محیط (ENVIRONMENT)
- WINE_GDB
- هنگامی که در حالت پروکسی gdb استفاده میشود، WINE_GDB نام (و مسیر) فایل اجرایی مورد استفاده برای gdb را مشخص میکند. بهطور پیشفرض از «gdb» استفاده میشود.
نویسندگان (AUTHORS)
نسخه نخست توسط Eric Youngdale نوشته شده است.
برای مشاهده سایر مشارکتکنندگان، فهرست توسعهدهندگان Wine را ببینید.
گزارش باگها (BUGS)
اشکالات را میتوان در سامانه ردیابی باگ Wine گزارش کرد..SH "دسترسپذیری (AVAILABILITY)" winedbg بخشی از توزیع Wine است که از طریق WineHQ، مرکز توسعه Wine، در دسترس است.
همچنین ببینید (SEE ALSO)
| October 2005 | Wine 11.17 |