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: که در آن درگاه 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 ببینید. دستورات متفرقه abort دیباگر را ساقط (بی‌درنگ متوقف) می‌کند. quit از دیباگر خارج می‌شود. مدیریت فرآیند 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 ویندوزی آن، به صورت عددی یا هگزادسیمال است). دستورات راهنما help راهنمایی درباره دستورات چاپ می‌کند. help info راهنمایی درباره دستورات info چاپ می‌کند. دستورات کنترل جریان 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 نوشته می‌شوند. با این حال، چند تفاوت وجود دارد: شناسه‌ها می‌توانند نویسه '!' را در نام خود داشته باشند. این قابلیت عمدتاً امکان تعیین پیمانه‌ای که شناسه باید در آن جستجو شود را فراهم می‌کند؛ مانند USER32!CreateWindowExA. در عملیات تبدیل نوع (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) wine(1), مستندات و پشتیبانی Wine . Wine 11.17 October 2005 WINEDBG(1)