نصب و پیکربندی WinDBG برای تجزیه و تحلیل تخلیه حافظه. ابزارهای اشکال زدایی ویندوز: تشخیص و رفع اشکال BSOD ابزارهای اشکال زدایی برای استفاده در ویندوز

هنگامی که یک شکست بحرانی رخ می دهد، سیستم عامل ویندوز از کار می افتد و صفحه آبی مرگ (BSOD) را نمایش می دهد. محتوا حافظه دسترسی تصادفیو تمام اطلاعات مربوط به خطای رخ داده در فایل swap نوشته می شود. دفعه بعد بوت کردن ویندوز Crash Dump ایجاد می شود اشکال زدایی اطلاعاتبر اساس داده های ذخیره شده یک ورودی خطای بحرانی در گزارش رویداد سیستم ایجاد می شود.

توجه!اگر زیرسیستم دیسک از کار بیفتد یا یک خطای بحرانی در مرحله اولیه بوت ویندوز رخ دهد، یک Crash Dump ایجاد نمی شود.

انواع خرابی ویندوز

استفاده از سیستم عامل فعلی ویندوز 10 به عنوان مثال ( ویندوز سرور 2016) انواع اصلی تخلیه حافظه را که سیستم می تواند ایجاد کند را در نظر بگیرید:

  • تخلیه حافظه کوچک(256 کیلوبایت). این نوع فایل حاوی حداقل مقدار اطلاعات است. این فقط حاوی پیام خطای BSOD، اطلاعات مربوط به درایورها، فرآیندهایی است که در زمان خرابی فعال بودند، و اینکه کدام فرآیند یا رشته هسته باعث خرابی شده است.
  • تخلیه حافظه هسته. به طور معمول اندازه کوچک است - یک سوم اندازه حافظه فیزیکی. یک حافظه خالی از هسته جزئیات بیشتری نسبت به یک کمپرس کوچک دارد. این شامل اطلاعاتی در مورد درایورها و برنامه‌های حالت هسته، شامل حافظه تخصیص یافته به هسته ویندوز و لایه انتزاعی سخت‌افزار (HAL) و حافظه تخصیص یافته به درایورها و سایر برنامه‌های حالت هسته است.
  • تخلیه کامل حافظه. بزرگ‌ترین اندازه و به حافظه‌ای برابر با رم سیستم شما به اضافه 1 مگابایت مورد نیاز ویندوز برای ایجاد این فایل نیاز دارد.
  • تخلیه خودکار حافظه. از نظر اطلاعات مربوط به تخلیه حافظه هسته است. تنها تفاوت این است که چقدر فضا برای ایجاد فایل dump استفاده می کند. این نوع فایل در ویندوز 7 وجود نداشت. در ویندوز 8 اضافه شد.
  • تخلیه حافظه فعال. این نوع عناصری را که نمی توانند علت خرابی سیستم را تعیین کنند حذف می کند. این به ویندوز 10 اضافه شده است و مخصوصاً اگر از ماشین مجازی استفاده می کنید یا سیستم شما یک هاست Hyper-V است مفید است.

چگونه تخلیه حافظه را در ویندوز فعال کنیم؟

با استفاده از Win+Pause، پنجره تنظیمات سیستم را باز کرده و " را انتخاب کنید. گزینه های اضافیسیستم های"(تنظیمات پیشرفته سیستم). در " علاوه بر این" (پیشرفته)، بخش "" (راه اندازی و بازیابی) روی دکمه کلیک کنید " گزینه ها"(تنظیمات). در پنجره ای که باز می شود، اقداماتی را پیکربندی کنید که در صورت خرابی سیستم انجام شوند. بررسی کنید " ثبت رویدادها در گزارش سیستم" (رویدادی را در گزارش سیستم بنویسید)، نوع Dump را انتخاب کنید که باید هنگام خرابی سیستم ایجاد شود. اگر در چک باکس " فایل dump موجود را جایگزین کنید"(هر فایل موجود را بازنویسی کنید) کادر را علامت بزنید، هر بار که مشکلی وجود داشته باشد، فایل بازنویسی می شود. بهتر است تیک این کادر را بردارید، سپس اطلاعات بیشتری برای تجزیه و تحلیل خواهید داشت. راه اندازی مجدد خودکار را نیز غیرفعال کنید.

در بیشتر موارد، یک تخلیه کوچک حافظه برای تجزیه و تحلیل علت BSOD کافی است.

اکنون، هنگامی که یک BSOD رخ می دهد، می توانید فایل dump را تجزیه و تحلیل کنید و علت خرابی را پیدا کنید. mini dump به طور پیش فرض در پوشه %systemroot%\minidump ذخیره می شود. برای تجزیه و تحلیل فایل dump، توصیه می کنم از برنامه استفاده کنید WinDBG(دیباگر هسته مایکروسافت).

نصب WinDBG روی ویندوز

سودمند WinDBGگنجانده شده در " Windows 10 SDK"(Windows 10 SDK). .

فایل نامیده می شود winsdksetup.exeحجم 1.3 مگابایت

نصب را اجرا کنید و دقیقاً آنچه را که می خواهید انجام دهید انتخاب کنید - بسته را روی این رایانه نصب کنید یا آن را برای نصب در رایانه های دیگر بارگیری کنید. بیایید بسته را روی رایانه محلی نصب کنیم.

شما می توانید کل بسته را نصب کنید، اما برای نصب فقط ابزار اشکال زدایی، را انتخاب کنید ابزارهای رفع اشکال برای ویندوز.

پس از نصب، میانبرهای WinDBG را می توان در منوی شروع پیدا کرد.

راه اندازی ارتباط فایل های .dmp با WinDBG

برای باز کردن فایل های دامپ با یک کلیک ساده، پسوند .dmp را به ابزار WinDBG نگاشت کنید.

  1. باز کن خط فرمانبه عنوان مدیر و دستورات یک سیستم 64 بیتی را اجرا کنید: cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
    windbg.exe –IA
    برای سیستم 32 بیتی:
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
    windbg.exe –IA
  2. در نتیجه، انواع فایل: .DMP، .HDMP، .MDMP، .KDMP، .WEW به WinDBG نگاشت می شوند.

راه اندازی سرور نماد اشکال زدایی در WinDBG

نمادهای اشکال زدایی (نمادهای اشکال زدایی یا فایل های نماد) بلوک هایی از داده های تولید شده در طول کامپایل یک برنامه همراه با فایل اجرایی هستند. چنین بلوک های داده حاوی اطلاعاتی در مورد نام متغیرها، به نام توابع، کتابخانه ها و غیره هستند. این داده ها هنگام اجرای برنامه مورد نیاز نیستند، اما هنگام اشکال زدایی آن مفید هستند. اجزای مایکروسافت با نمادهایی که از طریق سرور نماد مایکروسافت توزیع شده اند، جمع آوری می شوند.

WinDBG را پیکربندی کنید استفاده از مایکروسافتسرور نماد:

  • WinDBG را باز کنید؛
  • به منو بروید فایل –> مسیر فایل نماد.
  • یک خط حاوی URL برای دانلود نمادهای اشکال زدایی از وب سایت مایکروسافت و پوشه ذخیره کش بنویسید: SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols در مثال، حافظه پنهان دانلود شده است. در پوشه E:\Sym_WinDBG، می توانید هر کدام را نشان دهید.
  • فراموش نکنید که تغییرات را در منو ذخیره کنید فایل–>ذخیره فضای کاری؛

WinDBG نمادها را در پوشه محلی جستجو می کند و در صورتی که علائم لازم را در آن پیدا نکرد، به طور خودکار نمادها را از سایت مشخص شده دانلود می کند. اگر می خواهید پوشه نمادهای خود را اضافه کنید، می توانید این کار را به صورت زیر انجام دهید:

SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols;c:\Symbols

اگر به اینترنت متصل نیستید، ابتدا بسته نماد را از منبع Windows Symbol Packages دانلود کنید.

تجزیه و تحلیل یک خرابی در WinDBG

دیباگر WinDBG فایل dump را باز می کند و نمادهای لازم برای اشکال زدایی را از یک پوشه محلی یا از اینترنت دانلود می کند. در طول این فرآیند نمی توانید از WinDBG استفاده کنید. در پایین پنجره (در خط فرمان دیباگر) پیام ظاهر می شود اشکال زدایی متصل نیست.

دستورات در خط فرمان واقع در پایین پنجره وارد می شوند.

مهمترین چیزی که باید به آن توجه کنید کد خطا است که همیشه به صورت هگزادسیمال نشان داده شده و دارای فرم است. 0xXXXXXXXXX(در یکی از گزینه ها نشان داده شده است - STOP: , 07/02/2019 0008F, 0x8F). در مثال ما، کد خطا 0x139 است.

دیباگر پیشنهاد می کند که دستور!analyze -v را اجرا کند، فقط ماوس خود را روی پیوند ببرید و کلیک کنید. این دستور برای چیست؟

  • این تجزیه و تحلیل اولیه حافظه را انجام می دهد و ارائه می دهد اطلاعات دقیقبرای شروع تجزیه و تحلیل
  • این دستور کد STOP و نام نمادین خطا را نمایش می دهد.
  • مجموعه ای از فراخوان های فرمان را نشان می دهد که منجر به خرابی شده است.
  • علاوه بر این، آدرس IP، خطاهای پردازش و ثبت در اینجا نمایش داده می شود.
  • تیم می تواند توصیه های آماده ای برای حل مشکل ارائه دهد.

نکات اصلی که باید در هنگام تجزیه و تحلیل پس از اجرای دستور!analyze –v به آنها توجه کنید (فهرست ناقص).

1: kd> !analyze -v


* *
* تجزیه و تحلیل باگ چک *
* *
*****************************************************************************
نام نمادین خطای STOP (باگ چک)
KERNEL_SECURITY_CHECK_FAILURE (139)
شرح خطا (یک جزء هسته یک ساختار داده حیاتی را خراب کرده است. این خرابی به طور بالقوه می تواند به مهاجم اجازه دهد تا کنترل این ماشین را به دست آورد):

یک جزء هسته یک ساختار داده مهم را خراب کرده است. این فساد به طور بالقوه می تواند به کاربر مخرب اجازه دهد تا کنترل این دستگاه را در دست بگیرد.
آرگومان های خطا:

استدلال ها:
Arg1: 0000000000000003، یک LIST_ENTRY خراب شده است (یعنی دو بار حذف شود).
Arg2: ffffd0003a20d5d0، آدرس قاب تله برای استثنایی که باعث بررسی باگ شده است
Arg3: ffffd0003a20d528، آدرس رکورد استثنا برای استثنایی که باعث بررسی باگ شده است
ارگ4: 0000000000000000، رزرو شده
جزئیات رفع اشکال:
------------------

شمارنده نشان می دهد که چند بار سیستم با یک خطای مشابه از کار افتاده است:

CUSTOMER_CRASH_COUNT: 1

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

کد خطا STOP در قالب کوتاه شده:

BUGCHECK_STR: 0x139

فرآیندی که طی آن خرابی رخ داده است (الزاماً دلیل خطا نیست، فقط در زمان شکست این فرآیند در حافظه اجرا می شد):

PROCESS_NAME: sqlservr.exe

شرح کد خطا: سیستم یک سرریز پشته بافر را در این برنامه شناسایی کرده است که می تواند به مهاجم اجازه دهد کنترل این برنامه را به دست آورد.

ERROR_CODE: (NTSTATUS) 0xc0000409 - سیستم بیش از حد یک بافر مبتنی بر پشته را در این برنامه تشخیص داد. این بیش از حد به طور بالقوه می تواند به کاربر مخرب اجازه دهد تا کنترل این برنامه را به دست آورد.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - سیستم بیش از حد یک بافر مبتنی بر پشته را در این برنامه تشخیص داد. این بیش از حد به طور بالقوه می تواند به کاربر مخرب اجازه دهد تا کنترل این برنامه را به دست آورد.

آخرین تماس در پشته:

LAST_CONTROL_TRANSFER: از fffff8040117d6a9 به fffff8040116b0a0

پشته تماس در زمان شکست:

STACK_TEXT:
FFFF
ffffd000`3a20d2b0 fffff804`0117da50: ffffe000`f3ab9080 ffffe000`fc37e001 ffffd000`3a20d5d0 fffff804`0116e2a2KiBxpatch!
FFFF xd 0
FFFF 0
ffffd000`3a20d760 fffff804`014a455d: 00000000`00000001 ffffd000`3a20d941 fffe000`fcacb000 ffffd000`3a20d95! ?? ::FNODOBFM::`string"+0x17252
FFFF 9
ffffd000`3a20d990 fffff804`0117d313: fffffff`fffffffe 00000000`00000000 00000000`000000000 000000eb`a0cf1380:
FFFF 0x13
000000ee`f25ed2b8 00000000`00000000: 00000000`00000000 00000000`000000000 00000000`00000000:0000000000000000 5 307da

بخش کد که در آن خطا رخ داده است:

FOLLOWUP_IP:
nt!KiFastFailDispatch+d0
fffff804`0117da50 c644242000 mov byte ptr ,0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt!KiFastFailDispatch+d0
FOLLOWUP_NAME: مالک ماشین

نام ماژول در جدول شی هسته. اگر آنالیزور قادر به تشخیص بود راننده مشکل ساز، نام در فیلدهای MODULE_NAME و IMAGE_NAME نمایش داده می شود:

MODULE_NAME:nt
IMAGE_NAME: ntkrnlmp.exe

1: kd> lmvm nt
فهرست کامل ماژول را مرور کنید
فایل تصویر نماد بارگذاری شده: ntkrnlmp.exe
فایل تصویر حافظه نگاشت شده: C:\ProgramData\dbg\sym\ntoskrnl.exe\5A9A2147787000\ntoskrnl.exe
مسیر تصویر: ntkrnlmp.exe
نام تصویر: ntkrnlmp.exe
نام داخلی: ntkrnlmp.exe
نام فایل اصلی: ntkrnlmp.exe
نسخه محصول: 6.3.9600.18946
نسخه فایل: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

در مثال ارائه شده، تجزیه و تحلیل به فایل هسته ntkrnlmp.exe اشاره کرد. وقتی تجزیه و تحلیل تخلیه حافظه به یک درایور سیستم (مانند win32k.sys) یا یک فایل هسته (مانند مثال ما ntkrnlmp.exe) اشاره می کند، به احتمال زیاد این فایلعلت مشکل نیست خیلی اوقات معلوم می شود که مشکل در درایور دستگاه است، تنظیمات بایوسیا خرابی تجهیزات

اگر می بینید که BSOD توسط یک درایور شخص ثالث ایجاد شده است، نام آن در مقادیر MODULE_NAME و IMAGE_NAME نشان داده می شود.

مثلا:

مسیر تصویر: \SystemRoot\system32\drivers\cmudaxp.sys
نام تصویر: cmudaxp.sys

ویژگی های فایل درایور را باز کنید و نسخه آن را بررسی کنید. در بیشتر موارد، مشکل درایورها با به روز رسانی آنها حل می شود.

در 22 ژوئن 2010

قبلاً Windbg به طور جداگانه برای دانلود در دسترس بود. اما برای آخرین نسخه ها، مایکروسافت آن را به عنوان بخشی از Windows SDK نگه می دارد. لطفا لینک های دانلود زیر را بیابید.

ویندوز 10

آخرین نسخه Windbg برای ویندوز 7 را می توانید از لینک https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk دانلود کنید.

ویندوز 7

نصب کننده ها را از لینک های بالا دانلود کنید. توجه داشته باشید که این کل SDK را دانلود نمی کند، فقط یک نصب کننده است. پس از اجرای فایل، تو می توانیابزارهایی را که دوست دارید دانلود شوند انتخاب کنید. اگر فقط به Windbg علاقه مند هستید، می توانید هر چیز دیگری را حذف کنید و فقط "ابزارهای اشکال زدایی" را در زیر "کمک های مشترک" انتخاب کنید.

بسته فوق نسخه windbg 6.12 را نصب می کند. اگر می‌خواهید سریع windbg را نصب کنید، می‌توانید نسخه قدیمی‌تر (6.11) را که می‌توانید از آن دانلود کنید، انتخاب کنید.
لینک داده شده در انتهای این پست

پس از نصب، می توانید برنامه را در منوی استارت -> همه برنامه ها -> ابزارهای اشکال زدایی برای ویندوز -> Windbg پیدا کنید.

معرفی WinDBG - قسمت 1

الکساندر آنتیپوف

WinDBG یک دیباگر عالی است. ممکن است رابط کاربری چندان کاربرپسندی نداشته باشد و به طور پیش‌فرض پس‌زمینه مشکی نداشته باشد، اما یکی از قوی‌ترین و پایدارترین دیباگرها در سیستم‌عامل ویندوز در حال حاضر است. در این مقاله، شما را با اصول اولیه WinDBG آشنا می کنم تا بتوانید با آن شروع کنید.


WinDBG یک دیباگر عالی است. ممکن است رابط کاربری چندان کاربرپسندی نداشته باشد و به طور پیش‌فرض پس‌زمینه مشکی نداشته باشد، اما یکی از قوی‌ترین و پایدارترین دیباگرها در سیستم‌عامل ویندوز در حال حاضر است. در این مقاله، شما را با اصول اولیه WinDBG آشنا می کنم تا بتوانید با آن شروع کنید.

این اولین مقاله از مجموعه ای است که به WinDBG اختصاص دارد. لیست تمام مقالات موجود در این مجموعه:

  • بخش 1 - نصب، رابط، نمادها، اشکال زدایی از راه دور/محلی، سیستم راهنما، ماژول ها، رجیسترها.
  • بخش 2 - نقاط شکست.
  • بخش 3 - بازرسی حافظه، اشکال زدایی گام به گام برنامه، نکات و ترفندها.

در این مقاله به نصب و اتصال به یک فرآیند می پردازیم و در مقالات بعدی به نقاط شکست، اشکال زدایی گام به گام و بازرسی حافظه خواهیم پرداخت.

نصب WinDBG

در مقایسه با ویندوز 7، فرآیند نصب WinDBG در ویندوز 8 دستخوش تغییرات جزئی شده است. در این بخش به نصب یک دیباگر برای هر دو خواهیم پرداخت سیستم های عامل.

نصب WinDBG در ویندوز 8

در ویندوز 8، WinDBG در کیت درایور ویندوز (WDK) گنجانده شده است. می توانید Visual Studio و WDK را نصب کنید یا بسته Debugging Tools برای ویندوز 8.1 را جداگانه نصب کنید که شامل WinDBG می شود.

نصب کننده از شما می پرسد که آیا می خواهید WinDBG را به صورت محلی نصب کنید یا کل بسته توسعه را برای رایانه دیگری دانلود کنید. دومی در اصل معادل است نصب کننده آفلاینکه اگر بخواهید در آینده پکیج را روی سیستم های دیگر نصب کنید بسیار راحت است.

شکل 1: انتخاب نوع نصب

در پنجره بعدی، باید تیک تمام موارد به جز «ابزارهای اشکال زدایی برای ویندوز» را بردارید و روی دکمه «دانلود» کلیک کنید.

هنگامی که نصب کننده کار خود را به پایان رساند، به دایرکتوری که بسته در آن دانلود شده است بروید (به طور پیش فرض c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK است) و مراحل نصب را طی کنید.

نصب WinDBG در ویندوز 7 و نسخه های قبلی

برای ویندوز 7 و نسخه های قبلی، WinDBG بخشی از بسته "ابزارهای اشکال زدایی برای ویندوز" است که همراه با Windows SDK و Net Framework موجود است. لازم است که نصب کننده را دانلود کنید و سپس "ابزارهای اشکال زدایی برای ویندوز" را در طول مراحل نصب انتخاب کنید.

در حین نصب، گزینه "ابزارهای اشکال زدایی" را در زیر "بسته های قابل توزیع مجدد" انتخاب می کنم تا یک نصب کننده مستقل ایجاد کنم تا نصب های بعدی آسان تر شود.

شکل 2: انتخاب گزینه های نصب برای ایجاد یک نصب کننده مستقل

پس از اتمام نصب، باید نصب کننده های WinDBG برای پلتفرم های مختلف (در فهرست c:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\) داشته باشید.

شکل 3: پوشه با نصب کننده های WinDBG برای پلتفرم های مختلف

رابط WinDBG

شکل 4: ظاهر WinDBG

اولین باری که میبینی ظاهر WinDGB، متوجه خواهید شد که دیباگر به طرز وحشتناکی ساده است. اکثر توابع WinDBG در طی اشکال زدایی فرآیند یاد می گیرند. به جای صرف وقت برای توصیف رابط، در بخش های بعدی تنها به مهم ترین نکات خواهیم پرداخت.

اساسی ترین چیزی که باید در مورد رابط دیباگر بدانید پنجره فرمان است که از دو ناحیه تشکیل شده است. ناحیه اول: پنجره ای که در آن نتیجه اجرای دستور نمایش داده می شود. ناحیه دوم: یک فیلد متنی کوچک برای وارد کردن دستورات.

شکل 5: پنجره فرمان WinDBG

نمادها

در بیشتر موارد، WinDBG به تنظیمات خاصی نیاز ندارد و به درستی خارج از جعبه کار می کند. اما یک چیز مهم که باید پیکربندی شود شخصیت ها هستند. نمادها فایل هایی هستند که همراه با فایل اجرایی هنگام کامپایل شدن یک برنامه تولید می شوند و حاوی اطلاعات اشکال زدایی (توابع و نام متغیرها) هستند. اطلاعات اشکال زدایی به شما امکان می دهد تا عملکرد یک برنامه را در حین اشکال زدایی یا جداسازی قطعات بررسی کنید. بسیاری از اجزای مایکروسافت با نمادهایی که از طریق سرور نماد مایکروسافت توزیع می شوند، کامپایل می شوند. با بقیه فایل‌های اجرایی، همه چیز چندان خوب نیست - به ندرت فایل‌هایی با اطلاعات اشکال‌زدایی همراه با برنامه گنجانده می‌شوند. در بیشتر موارد، شرکت ها دسترسی به چنین اطلاعاتی را محدود می کنند.

برای پیکربندی WinDBG برای استفاده از Microsoft Symbol Server، به File:Symbol File Path بروید و مسیر را روی SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols قرار دهید. البته کمی عجیب است که از ستاره ها به عنوان جداکننده استفاده می شود. پس از راه اندازی Microsoft Symbol Server، نمادها در پوشه C:\Symbols دانلود می شوند.

شکل 6: راه اندازی سرور نماد مایکروسافت

WinDBG به صورت خودکار نمادهای فایل های باینری را در صورت نیاز بارگذاری می کند. همچنین می توانید پوشه نمادهای خود را مانند این اضافه کنید:

SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder

اضافه کردن نمادها هنگام اشکال زدایی

اگر در حین اشکال‌زدایی نیاز به وارد کردن نمادها دارید، می‌توانید این کار را با استفاده از .sympath انجام دهید (وقتی وارد فرآیند می‌شوید یک پنجره فرمان ظاهر می‌شود). به عنوان مثال، برای افزودن پوشه c:\SomeOtherSymbolFolder، دستور زیر را وارد کنید:

0:025> .sympath+ c:\SomeOtherSymbolFolder
مسیر جستجوی نماد عبارت است از: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
مسیر جستجوی نماد گسترش یافته عبارت است از: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

پس از افزودن یا تغییر مسیرها، ایده خوبی است که نمادها را دوباره بارگیری کنید:

0:025> بارگذاری مجدد
بارگذاری مجدد ماژول های فعلی
................................................................
...............................................

بررسی نمادهای بارگذاری شده

برای اینکه ببینید کدام ماژول ها دارای نمادها هستند، می توانید از دستور x*! استفاده کنید. اگرچه WinDBG فقط نمادها را در صورت نیاز بارگذاری می کند، x*! نمادهای قابل بارگیری را نشان می دهد. می توانید با استفاده از دستور ld * نمادها را مجبور کنید بارگذاری شوند (این ممکن است کمی طول بکشد و می توانید با رفتن به Debug:Break روند را متوقف کنید).

اکنون می توانیم نمادهای هر ماژول را ببینیم.

شکل 8: فهرست نمادها

اشکال زدایی یک فرآیند محلی

هنگام اشکال زدایی یک فرآیند محلی، دو گزینه دارید:

  1. به یک فرآیند در حال اجرا متصل شوید.
  2. فرآیند را از طریق WinDBG شروع کنید.

هر روشی مزایا و معایب خاص خود را دارد. مثلاً اگر برنامه ای را از طریق WinDBG اجرا می کنید، به برخی از گزینه های اشکال زدایی ویژه (مثلاً اشکال زدایی پشته) دسترسی دارید که می تواند باعث از کار افتادن برنامه شود. از سوی دیگر، برنامه هایی نیز وجود دارند که وقتی یک دیباگر را به آنها وصل می کنید، از کار می افتند. برخی از برنامه ها (به ویژه بدافزار) وجود یک اشکال زدا را در سیستم در هنگام راه اندازی بررسی می کنند و بر این اساس، در این مورد منطقی است که به یک فرآیند در حال اجرا چسبیده باشید. گاهی اوقات شما در حال اشکال زدایی یک سرویس ویندوز هستید که برخی از پارامترها را در حین راه اندازی تنظیم می کند، بنابراین برای ساده تر کردن فرآیند اشکال زدایی، بهتر است به جای اجرای سرویس از طریق دیباگر، به فرآیند در حال اجرا متصل شوید. برخی افراد ادعا می کنند که اجرای یک فرآیند از طریق دیباگر تأثیر جدی بر عملکرد دارد. به طور خلاصه، هر دو را امتحان کنید و بهترین را انتخاب کنید. اگر به دلایلی روش خاصی را ترجیح می دهید، نظرات خود را در نظرات به اشتراک بگذارید!

شروع فرآیند

اگر یک برنامه مستقل را که به صورت محلی اجرا می شود و با شبکه ارتباط برقرار نمی کند اشکال زدایی می کنید، ممکن است بخواهید آن را از طریق WinDBG اجرا کنید. با این حال، این بدان معنا نیست که شما نمی توانید به یک فرآیند در حال اجرا متصل شوید. روشی را انتخاب کنید که برای شما راحت تر است.

شروع فرآیند کار سختی نیست. به "File:Open Executable" بروید و فایل اجرایی را که می خواهید اشکال زدایی کنید انتخاب کنید. همچنین می توانید آرگومان ها را مشخص کنید یا دایرکتوری شروع را تنظیم کنید:

شکل 9: انتخاب فایل اجراییبرای اشکال زدایی

اتصال فرآیند

اتصال به یک فرآیند از قبل در حال اجرا نیز دشوار نیست. با این حال، توجه داشته باشید که در برخی موارد ممکن است یافتن فرآیند دقیقی که می خواهید اشکال زدایی کنید، زمان ببرد. به عنوان مثال، برخی از مرورگرها یک فرآیند والد و سپس چندین پردازش دیگر را برای هر تب ایجاد می کنند. بنابراین، بسته به محل خرابی که در حال رفع اشکال هستید، ممکن است بخواهید به جای فرآیند والد، به فرآیند مرتبط با برگه متصل شوید.

برای پیوست کردن به یک فرآیند از قبل در حال اجرا، به «File: Attach to a Process» بروید و سپس PID یا نام فرآیند را انتخاب کنید. به یاد داشته باشید که برای پیوستن به فرآیند باید از حقوق مناسب برخوردار باشید.

شکل 10: انتخاب فرآیندی که باید به آن متصل شود

اگر پس از اتصال، برنامه عملکرد خود را متوقف کرد، می توانید با علامت زدن کادر مناسب از حالت "Noninvaise" استفاده کنید.

اشکال زدایی یک فرآیند از راه دور

گاهی اوقات ممکن است نیاز به اشکال زدایی یک فرآیند در یک سیستم راه دور داشته باشید. حل این مشکل با استفاده از یک دیباگر محلی به جای استفاده بسیار راحت تر خواهد بود ماشین مجازییا RDP یا شاید شما در حال رفع اشکال فرآیند LoginUI.exe هستید که تنها زمانی قابل دسترسی است که سیستم قفل باشد. در چنین شرایطی، می توانید از نسخه محلی WinDBG استفاده کنید و از راه دور به پردازش ها متصل شوید. دو روش رایج برای حل این مشکلات وجود دارد.

جلسات اشکال زدایی موجود

اگر قبلاً اشکال زدایی یک برنامه را به صورت محلی شروع کرده اید (با اتصال یا اجرای یک فرآیند از طریق WinDBG)، می توانید یک دستور خاص را وارد کنید و WinDBG یک "شنونده" را راه اندازی می کند که دیباگر از راه دور می تواند به آن متصل شود. برای این کار از دستور .server استفاده کنید:

سرور tcp:port=5005

پس از اجرای دستور بالا، ممکن است اخطاری مانند زیر را مشاهده کنید:

شکل 11: پیام هشداری که ممکن است پس از اجرای دستور ایجاد شنونده ظاهر شود

WinDBG سپس گزارش می دهد که سرور در حال اجرا است:

0:005> .server tcp:port=5005
0: -Remote tcp:Port=5005,Server=USER-PC

اکنون می توانید با رفتن به "File:Connect to a Remote Session" از یک میزبان راه دور به یک جلسه اشکال زدایی موجود وصل شوید و چیزی شبیه به زیر را در قسمت متن وارد کنید: tcp:Port=5005,Server=192.168.127.138

شکل 12: اتصال از راه دور به جلسه اشکال زدایی

پس از اتصال، تأییدیه را در مشتری راه دور دریافت خواهید کرد:


سرور شروع شد کلاینت می تواند با هر یک از این خطوط فرمان ارتباط برقرار کند
0: -Remote tcp:Port=5005,Server=USER-PC
MACHINENAME\User (tcp 192.168.127.138:13334) در دوشنبه 16 دسامبر 09:03:03 2013 متصل شد

و پیام در نسخه محلی دیباگر:

MACHINENAME\User (tcp 192.168.127.138:13334) در دوشنبه 16 دسامبر 09:03:03 2013 متصل شد

ایجاد سرور راه دور

همچنین می توانید یک سرور جداگانه با WinDBG ایجاد کنید، از راه دور به آن متصل شوید و فرآیندی را برای دیباگ انتخاب کنید. این را می توان با استفاده از فایل dbgsrv.exe که در آن قصد دارید فرآیندها را اشکال زدایی کنید، انجام شود. برای راه اندازی چنین سروری، دستور زیر را اجرا کنید:

dbgsrv.exe -t tcp:port=5005

شکل 13: راه اندازی یک سرور راه دور

دوباره، ممکن است یک هشدار امنیتی دریافت کنید که باید آن را بپذیرید:

شکل 14: پیام امنیتی که ممکن است در هنگام راه اندازی سرور اشکال زدایی ظاهر شود

با رفتن به File: Connect to Remote Stub و وارد کردن خط زیر در قسمت متن می توانید به سرور اشکال زدایی متصل شوید: tcp:Port=5005,Server=192.168.127.138

شکل 15: اتصال به سرور اشکال زدایی

پس از اتصال، هیچ سیگنالی را که متصل کرده اید دریافت نخواهید کرد، اما اگر به "File:Attach to a Process" بروید، لیستی از فرآیندهای سرور اشکال زدایی (جایی که dbgsrv.exe در حال اجرا است) خواهید دید. اکنون می توانید به این فرآیند متصل شوید، گویی که آن را به صورت محلی انجام می دهید.

سیستم راهنما

سیستم کمک در WinDBG عالی است. علاوه بر یادگیری چیزهای جدید، باید بتوانید اطلاعات پس زمینه ای را در مورد یک فرمان دریافت کنید. برای دسترسی به راهنمای WinDBG از دستور hh استفاده کنید:

همچنین می توانید اطلاعات کمکی برای یک دستور خاص دریافت کنید. برای مثال، برای کمک گرفتن از دستور .reload، از دستور زیر استفاده کنید:

windbg> .hh .بارگیری مجدد

یا فقط به بخش Help:Contents بروید.

ماژول ها

در حالی که برنامه در حال اجرا است، ماژول های مختلفی برای ارائه عملکرد برنامه وارد می شوند. بنابراین، اگر بدانید کدام ماژول‌ها توسط اپلیکیشن وارد شده‌اند، می‌توانید نحوه عملکرد آن را بهتر درک کنید. در بسیاری از موارد، به جای خود فایل اجرایی، ماژول خاصی را که توسط برنامه بارگذاری شده است، اشکال زدایی می کنید.

پس از اتصال به فرآیند، WinDBG به طور خودکار ماژول های بارگذاری شده را نمایش می دهد. به عنوان مثال، ماژول‌هایی که پس از اتصال به calc.exe در زیر آمده است:

Microsoft (R) Windows Debugger نسخه 6.12.0002.633 X86
حق چاپ (ج) شرکت مایکروسافت. تمامی حقوق محفوظ است.

*** با پیوست در انتظار صبر کنید
مسیر جستجوی نماد عبارت است از: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
مسیر جستجوی اجرایی:
ModLoad: 00a70000 00b30000 C:\Windows\system32\calc.exe
ModLoad: 77630000 7776c000 C:\Windows\SYSTEM32\ntdll.dll
ModLoad: 77550000 77624000 C:\Windows\system32\kernel32.dll
ModLoad: 75920000 7596a000 C:\Windows\system32\KERNELBASE.dll
ModLoad: 76410000 77059000 C:\Windows\system32\SHELL32.dll
ModLoad: 77240000 772ec000 C:\Windows\system32\msvcrt.dll
ModLoad: 76300000 76357000 C:\Windows\system32\SHLWAPI.dll
ModLoad: 75cd0000 75d1e000 C:\Windows\system32\GDI32.dll
ModLoad: 75fa0000 76069000 C:\Windows\system32\USER32.dll
ModLoad: 777b0000 777ba000 C:\Windows\system32\LPK.dll
ModLoad: 774b0000 7754d000 C:\Windows\system32\USP10.dll
ModLoad: 73110000 732a0000 C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_
6595b64144ccf1df_1.1.7600.16385_none_72fc7cbf861225ca\gdiplus.dll
ModLoad: 75a80000 75bdc000 C:\Windows\system32\ole32.dll
ModLoad: 76360000 76401000 C:\Windows\system32\RPCRT4.dll
ModLoad: 777c0000 77860000 C:\Windows\system32\ADVAPI32.dll
ModLoad: 75be0000 75bf9000 C:\Windows\SYSTEM32\sechost.dll
ModLoad: 76270000 762ff000 C:\Windows\system32\OLEAUT32.dll
ModLoad: 74590000 745d0000 C:\Windows\system32\UxTheme.dll
ModLoad: 74710000 748ae000 C:\Windows\WinSxS\x86_microsoft.windows.common-
ModLoad: 703d0000 70402000 C:\Windows\system32\WINMM.dll
ModLoad: 74c80000 74c89000 C:\Windows\system32\VERSION.dll
ModLoad: 77770000 7778f000 C:\Windows\system32\IMM32.DLL
ModLoad: 75c00000 75ccc000 C:\Windows\system32\MSCTF.dll
ModLoad: 74130000 7422b000 C:\Windows\system32\WindowsCodecs.dll
ModLoad: 74260000 74273000 C:\Windows\system32\dwmapi.dll
ModLoad: 756d0000 756dc000 C:\Windows\system32\CRYPTBASE.dll
ModLoad: 75e60000 75ee3000 C:\Windows\system32\CLBCatQ.DLL
ModLoad: 6ef10000 6ef4c000 C:\Windows\system32\oleacc.dll

بعداً در فرآیند اشکال زدایی، می توانید این لیست را دوباره با استفاده از دستور lmf نمایش دهید:

0:005>lmf
نام ماژول پایان شروع
00a70000 00b30000 calc C:\Windows\system32\calc.exe
6ef10000 6ef4c000 oleacc C:\Windows\system32\oleacc.dll
703d0000 70402000 WINMM C:\Windows\system32\WINMM.dll
73110000 732a0000 gdiplus C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_
1.1.7600.16385_none_72fc7cbf861225ca\gdiplus.dll
74130000 7422b000 WindowsCodecs C:\Windows\system32\WindowsCodecs.dll
74260000 74273000 dwmapi C:\Windows\system32\dwmapi.dll
74590000 745d0000 UxTheme C:\Windows\system32\UxTheme.dll
74710000 748ae000 COMCTL32 C:\Windows\WinSxS\x86_microsoft.windows.common-
controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc\COMCTL32.dll
74c80000 74c89000 VERSION C:\Windows\system32\VERSION.dll
756d0000 756dc000 CRYPTBASE C:\Windows\system32\CRYPTBASE.dll
75920000 7596a000 KERNELBASE C:\Windows\system32\KERNELBASE.dll
75a80000 75bdc000 ole32 C:\Windows\system32\ole32.dll
75be0000 75bf9000 sechost C:\Windows\SYSTEM32\sechost.dll
75c00000 75cccc000 MSCTF C:\Windows\system32\MSCTF.dll
75cd0000 75d1e000 GDI32 C:\Windows\system32\GDI32.dll
75e60000 75ee3000 CLBCatQ C:\Windows\system32\CLBCatQ.DLL
75fa0000 76069000 USER32 C:\Windows\system32\USER32.dll
76270000 762ff000 OLEAUT32 C:\Windows\system32\OLEAUT32.dll
76300000 76357000 SHLWAPI C:\Windows\system32\SHLWAPI.dll
76360000 76401000 RPCRT4 C:\Windows\system32\RPCRT4.dll
76410000 77059000 SHELL32 C:\Windows\system32\SHELL32.dll
77240000 772ec000 msvcrt C:\Windows\system32\msvcrt.dll
774b0000 7754d000 USP10 C:\Windows\system32\USP10.dll
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll
77630000 7776c000 ntdll C:\Windows\SYSTEM32\ntdll.dll
77770000 7778f000 IMM32 C:\Windows\system32\IMM32.DLL
777b0000 777ba000 LPK C:\Windows\system32\LPK.dll
777c0000 77860000 ADVAPI32 C:\Windows\system32\ADVAPI32.dll

همچنین می توانید با استفاده از دستور "lmf m" آدرس بارگیری یک ماژول خاص را پیدا کنید:

0:005> lmf m kernel32
نام ماژول پایان شروع
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll

همچنین می توانید اطلاعاتی در مورد هدر تصویر یک ماژول خاص با استفاده از پسوند!dh دریافت کنید ( علامت تعجبیک پسوند را نشان می دهد):

0:005> !dh kernel32

نوع فایل: DLL
مقادیر سرصفحه فایل
دستگاه 14C (i386)
4 تعداد بخش
مهر تاریخ 4A5BDAAD دوشنبه 13 ژوئیه 21:09:01 2009

0 نشانگر فایل به جدول نمادها
0 تعداد نمادها
اندازه E0 سربرگ اختیاری
2102 ویژگی
قابل اجرا
ماشین کلمه 32 بیتی
DLL

مقادیر هدر اختیاری
10B جادو #
نسخه پیوند دهنده 9.00
اندازه کد C4600
اندازه C800 داده های اولیه
اندازه 0 داده های اولیه
آدرس نقطه ورودی 510C5
کد پایه 1000
----- جدید -----
پایه تصویر 77550000
تراز 1000 بخش
تراز فایل 200
3 زیر سیستم (ویندوز CUI)
نسخه سیستم عامل 6.01
نسخه تصویر 6.01
نسخه زیرسیستم 6.01
اندازه تصویر D4000
سایز 800 سرصفحه
جمع کنترلی D5597
00040000 اندازه ذخیره پشته
اندازه 00001000 پشته commit
00100000 اندازه ذخیره پشته
00001000 اندازه هپ متعهد
140 ویژگی DLL
پایه پویا
سازگار با NX
آدرس B4DA8 [A915] دایرکتوری صادرات
آدرس BF6C0 [ 1F4] دایرکتوری واردات
آدرس C7000 [520] فهرست منابع
0 [ 0] آدرس دایرکتوری استثنا
0 [ 0] آدرس دایرکتوری امنیتی
آدرس C8000 [B098] دایرکتوری جابجایی پایگاه
آدرس C5460 [ 38] دایرکتوری اشکال زدایی
0 [ 0] آدرس دایرکتوری توضیحات
0 [ 0] آدرس دایرکتوری ویژه
0 [ 0] آدرس دایرکتوری ذخیره‌سازی موضوع
آدرس 816B8 [ 40] Load Configuration Directory
278 [408] آدرس دایرکتوری Bound Import
آدرس 1000 [DE8] فهرست راهنمای جدول آدرس ورودی
0 [ 0] آدرس دایرکتوری تاخیر واردات
0 [ 0] آدرس دایرکتوری هدر COR20
0 [ 0] آدرس دایرکتوری رزرو شده

سرفصل بخش شماره 1
نام متن
اندازه مجازی C44C1
آدرس مجازی 1000
اندازه C4600 داده های خام
نشانگر 800 فایل به داده های خام

0 تعداد جابجایی ها
0 تعداد شماره خطوط
60000020 پرچم
کد
(هیچ تراز مشخص نشده است)
Read را اجرا کنید

دایرکتوری اشکال زدایی (2)
نشانگر اندازه آدرس را تایپ کنید
فرمت cv 25 c549c c4c9c: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

سرفصل بخش شماره 2
نام داده
اندازه مجازی FEC
آدرس مجازی C6000
اندازه E00 داده های خام
نشانگر فایل C4E00 به داده های خام
0 نشانگر فایل به جدول جابجایی
0 نشانگر فایل به شماره خط
0 تعداد جابجایی ها
0 تعداد شماره خطوط
پرچم های C0000040
داده های اولیه
(هیچ تراز مشخص نشده است)
بخوانید بنویسید

سربرگ بخش شماره 3
نام rsrc
سایز مجازی 520
آدرس مجازی C7000
اندازه 600 داده خام
نشانگر فایل C5C00 به داده های خام
0 نشانگر فایل به جدول جابجایی
0 نشانگر فایل به شماره خط
0 تعداد جابجایی ها
0 تعداد شماره خطوط
40000040 پرچم
داده های اولیه
(هیچ تراز مشخص نشده است)
فقط خواندنی

سرفصل بخش شماره 4
.reloc نام
اندازه مجازی B098
آدرس مجازی C8000
اندازه B200 داده های خام
نشانگر فایل C6200 به داده های خام
0 نشانگر فایل به جدول جابجایی
0 نشانگر فایل به شماره خط
0 تعداد جابجایی ها
0 تعداد شماره خطوط
42000040 پرچم
داده های اولیه
قابل حذف
(هیچ تراز مشخص نشده است)
فقط خواندنی

پیام ها و استثناها

پس از اتصال به یک فرآیند، ابتدا لیستی از ماژول ها نمایش داده می شود و سپس ممکن است پیام های دیگری ظاهر شوند. به عنوان مثال، هنگامی که ما به calc.exe متصل می‌شویم، WinDBG به طور خودکار یک نقطه شکست (که صرفاً نشانگری است که برای توقف برنامه استفاده می‌شود) تعیین می‌کند. اطلاعات نقطه شکست روی صفحه نمایش داده می شود:

(da8.b44): استثناء دستورالعمل شکست - کد 80000003 (اولین فرصت)

این پیام خاص یک استثنا است، یعنی یک استثنای شانس اول. در اصل، استثنا یک شرایط خاص است که در حین اجرای یک برنامه اتفاق می افتد. استثنای شانس اول به این معنی است که برنامه بلافاصله پس از وقوع استثنا متوقف می شود. استثنا شانس دوم به این معنی است که پس از وقوع استثنا، برخی از عملیات ها انجام می شود و سپس برنامه از کار می افتد.

ثبت می کند

پس از نمایش پیام ها و استثناها، دیباگر وضعیت رجیسترهای پردازنده را نمایش می دهد. ثبات ها متغیرهای ویژه ای در داخل پردازنده هستند که قطعات کوچکی از اطلاعات را ذخیره می کنند یا وضعیت چیزی را در حافظه نظارت می کنند. پردازنده می تواند اطلاعات موجود در این ثبات ها را خیلی سریع پردازش کند. این بسیار سریعتر از دریافت هر بار اطلاعات از طریق اتوبوس از RAM است.

پس از اتصال به calc.exe، WinDBG به طور خودکار اطلاعات مربوط به رجیسترهای زیر را نمایش می دهد:

eax=7ffd9000 ebx=00000000 ecx=00000000 edx=776cd23d esi=00000000 edi=00000000
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246

می توانید بعداً با استفاده از دستور r دوباره این اطلاعات را کپی کنید:

0:005>r
eax=7ffd9000 ebx=00000000 ecx=00000000 edx=776cd23d esi=00000000 edi=00000000
eip=77663540 esp=02affd9c ebp=02affdc8 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!DbgBreakPoint:
77663540 سی سی int 3

اگر بخواهیم مقدار یک ثبات خاص را بدست آوریم، می توانیم دستور زیر را اجرا کنیم:

0:005> r eax
eax=7ffd9000

اطلاعات را می توان به طور همزمان از چندین ثبت به شرح زیر بدست آورد:

0:005> r eax,ebp
eax=7ffd9000 ebp=02affdc8

اشاره گر به دستورالعمل

آخرین دستور مربوط به دستورالعمل هایی است که باید اجرا شوند. در اینجا نیز اطلاعات روی صفحه نمایش داده می شود، مانند دستور r، از آنچه که رجیستر EIP حاوی آن است. EIP یک ثبات است که حاوی محل دستور بعدی است که توسط پردازنده اجرا می شود. چیزی که WinDBG نمایش می دهد معادل دستور u eip L1 است که پس از آن WinDBG به آدرس مشخص شده در رجیستر EIP رفته و این قسمت را به کد اسمبلی تبدیل کرده و روی صفحه نمایش می دهد.

ntdll!DbgBreakPoint:
77663540 سی سی int 3

در تماس باش

در مقالات آینده، نحوه استفاده از WinDBG را در این زمینه بررسی خواهیم کرد: نقاط شکست، اشکال زدایی گام به گام و مرور حافظه. سوئیچ نکن! جی.

ابزارهای رفع اشکال برای ویندوز- ابزارهای اشکال زدایی کد عملیاتی سیستم های ویندوز. آنها مجموعه ای از برنامه های آزادانه توزیع شده از مایکروسافت هستند که برای اشکال زدایی حالت کاربر و کد حالت هسته طراحی شده اند: برنامه ها، درایورها، خدمات، ماژول های هسته. این جعبه ابزار شامل دیباگرهای کنسول و حالت رابط کاربری گرافیکی، ابزارهای کمکی برای کار با نمادها، فایل ها، فرآیندها و ابزارهای کمکی برای اشکال زدایی از راه دور است. جعبه ابزار شامل ابزارهایی است که می توان از آنها برای یافتن علل خرابی در اجزای مختلف سیستم استفاده کرد. ابزارهای رفع اشکال برای ویندوزاز یک نقطه خاص به بعد برای دانلود در قالب یک توزیع مستقل در دسترس نیستند و بخشی از Windows SDK (کیت توسعه نرم افزار ویندوز) هستند. مجموعه دستگاهی ابزارهای ویندوز SDK، به نوبه خود، به عنوان بخشی از برنامه اشتراک MSDN در دسترس است یا می توان آن را به صورت رایگان به عنوان یک توزیع جداگانه از msdn.microsoft.com دانلود کرد. به گفته توسعه دهندگان، جدیدترین و جدیدترین نسخه فعلیابزارهای اشکال زدایی برای ویندوز به طور خاص در Windows SDK موجود است.

ابزارهای اشکال زدایی برای ویندوز اغلب به روز می شوند و در دسترس عموم قرار می گیرند و این فرآیند به هیچ وجه به انتشار سیستم عامل ها بستگی ندارد. بنابراین، به صورت دوره ای نسخه های جدید را بررسی کنید.

اکنون بیایید ببینیم که ابزارهای Debugging به طور خاص برای چه چیزی هستند ویندوز مایکروسافت:

  • اشکال زدایی برنامه های کاربردی، خدمات، درایورها و هسته محلی؛
  • اشکال زدایی برنامه های کاربردی، سرویس ها، درایورها و هسته از راه دور از طریق شبکه؛
  • اشکال زدایی برنامه های در حال اجرا در زمان واقعی.
  • تجزیه و تحلیل فایل های تخلیه حافظه برنامه ها، هسته و سیستم به عنوان یک کل؛
  • کار با سیستم های مبتنی بر معماری x86/x64/ایتانیوم.
  • اشکال زدایی حالت کاربر و برنامه های حالت هسته.

نسخه های زیر از ابزارهای اشکال زدایی برای ویندوز موجود است: 32 بیت x86، اینتل Itanium، 64 بیت x64. ما به دو مورد از آنها نیاز خواهیم داشت: x86 یا x64.

راه‌های مختلفی برای نصب Debugging Tools برای ویندوز وجود دارد؛ در این مقاله تنها موارد اصلی را بررسی می‌کنیم:

  • نصب از طریق نصب کننده وب
  • نصب ابزارهای رفع اشکال برای ویندوز از ISO تصویر ویندوز SDK.
  • نصب ابزارهای اشکال زدایی برای ویندوز به طور مستقیم از بسته های dbg_amd64.msi / dbg_x86.msi.

هنوز مشخص نیست در چه مرحله ای، چرا باید ابزارهای اشکال زدایی را روی رایانه خود نصب کنم؟ اغلب شما با شرایطی مواجه می شوید که دخالت در محیط کار به شدت نامطلوب است! و حتی بیشتر از آن، نصب یک محصول جدید، یعنی ایجاد تغییرات در فایل های رجیستری/سیستم، ممکن است کاملا غیرقابل قبول باشد. به عنوان مثال می توان به سرورهای ماموریت حیاتی اشاره کرد. چرا توسعه دهندگان گزینه نسخه قابل حمل برنامه هایی را که نیازی به نصب ندارند در نظر نمی گیرند؟
از نسخه ای به نسخه دیگر، روند نصب بسته Debugging Tools برای ویندوز دستخوش تغییراتی می شود. بیایید اکنون مستقیماً به فرآیند نصب برویم و به روش هایی که می توانید جعبه ابزار را نصب کنید نگاه کنیم.

نصب ابزارهای اشکال زدایی برای ویندوز با استفاده از نصب کننده وب

به صفحه Windows SDK Archive بروید و بخشی به نام Windows 10 و در زیر مورد «Windows 10 SDK (10586) and device emulator with Windows 10 Mobile (Microsoft) (نسخه 10586.11)» را پیدا کنید.

روی مورد کلیک کنید SDK را نصب کنید. پس از کلیک کردن، فایل sdksetup.exe را دانلود و اجرا کنید که فرآیند نصب آنلاین Windows SDK را آغاز می کند. در مرحله اولیه، نصب کننده بررسی می کند که آیا بسته دات نت فریم ورک روی سیستم نصب شده است یا خیر آخرین نسخه(V این لحظهاین 4.5 است). اگر بسته وجود نداشته باشد، نصب ارائه خواهد شد و ایستگاه پس از تکمیل مجدد راه اندازی می شود. بلافاصله پس از راه اندازی مجدد، در مرحله مجوز کاربر، فرآیند نصب ویندوز SDK شروع می شود.

اغلب، هنگام انتخاب تمام اجزای یک بسته بدون استثنا، ممکن است خطاهایی در طول فرآیند نصب رخ دهد. در این مورد، توصیه می شود قطعات را به صورت انتخابی، حداقل مجموعه مورد نیاز نصب کنید.

پس از اتمام نصب Debugging Tools برای ویندوز، محل فایل های اشکال زدایی در چه زمانی است این روشنصب ما به شرح زیر خواهد بود:

  • نسخه های 64 بیتی: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x64
  • نسخه های 32 بیتی: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x86

* جایی که x.x یک نسخه خاص از کیت توسعه است.
ما متوجه شدیم که نسخه های 8 و بالاتر، مسیرهای نصب به طور قابل توجهی با موارد کلاسیک برای همه متفاوت است نسخه های قبلیابزارهای رفع اشکال؟

یک امتیاز بزرگ این روشنصب ابزارهای اشکال زدایی برای ویندوز شامل نصب نسخه هایی از ابزارهای اشکال زدایی برای همه معماری ها به طور همزمان است.

نصب ابزارهای اشکال زدایی برای ویندوز از Windows SDK ISO

این روش شامل نصب ابزارهای اشکال زدایی برای ویندوز با استفاده از تصویر نصب کامل ویندوز SDK (کیت توسعه دهندگان نرم افزار) است. تا زمان مشخصی دانلود کنید تصویر ISOبرای سیستم مربوطه در صفحه آرشیو Windows SDK امکان پذیر بود. با این حال، در حال حاضر، می‌توانید با اجرای web installer sdksetup.exe و انتخاب یک تصویر ISO از SDK دریافت کنید. کیت توسعه نرم افزار ویندوز را دانلود کنیددر پنجره شروع نصب:

همانطور که متوجه شدیم، روش نصب قبلی با استفاده از نصب کننده وب کاملاً دمدمی مزاج است و اغلب به اشتباه ختم می شود. در سیستم‌های تمیز بدون مشکل نصب می‌شود، اما در سیستم‌هایی که به اندازه کافی بارگذاری شده‌اند، مشکلات متعددی ایجاد می‌شود. اگر این مورد شماست، پس از این روش استفاده کنید.

بر این اساس، در صفحه باید توزیع مورد نیاز را انتخاب کنید، برای من (و فکر می کنم برای بسیاری) در حال حاضر "Windows SDK for Windows 7 و .NET Framework 4" است و فقط در زیر روی پیوند "دریافت یک ISO" کلیک کنید. تصویر یک DVD”.

هنگام کار با سایت msdn.microsoft.com، توصیه می کنم از یک مرورگر استفاده کنید اینترنت اکسپلورر، از آنجایی که مواردی از کار نکردن محصولات رقیب وجود داشته است!

بر این اساس، انتخاب صرفاً بر اساس ضرورت ضروری است. به طور معمول، بیتی ابزار Debugging برای ویندوز با بیتی بودن سیستم مطابقت دارد. سیستم های من اکثراً 64 بیتی هستند، بنابراین در بیشتر موارد من تصویر را برای یک سیستم 64 بیتی GRMSDKX_EN_DVD.iso دانلود می کنم.
سپس پس از دانلود تصویر، باید به نحوی با تصویر ISO موجود کار کنیم. روش سنتی، البته، رایت سی دی است، اما این روش نسبتا طولانی و گاهی گران است. پیشنهاد می کنم از ابزارهای رایگان برای ایجاد دستگاه های دیسک مجازی در سیستم استفاده کنید. من شخصا ترجیح می دهم از DEAMON Tools Lite برای این منظور استفاده کنم. ممکن است شخصی ترجیحات دیگری داشته باشد، برنامه های مستقیم یا سبک تر، بسته به سلیقه و رنگ، همانطور که می گویند.. پس از نصب DAEMON Tools Lite، من به سادگی روی فایل تصویر GRMSDKX_EN_DVD.iso دوبار کلیک می کنم و یک مجازی جدید در سیستم ظاهر می شود. سی دی:

سپس با دوبار کلیک کردن، بارگذاری خودکار را فعال کرده و نصب SDK ویندوز را شروع می کنم:

وقتی زمان انتخاب مؤلفه‌ها برای نصب از لیست فرا می‌رسد، ما کاملاً همه گزینه‌ها را غیرفعال می‌کنیم، به جز مواردی که در تصویر مشخص شده‌اند. این به ما کمک می کند از اشتباهات غیر ضروری در حال حاضر جلوگیری کنیم.


همه چیز دقیقاً همینطور است ، در اسکرین شات دو گزینه مشخص شده است: "Windows Performance Toolkit" و "Debugging Tools for Windows". هر دو را انتخاب کنید، زیرا Windows Performance Toolkit مطمئناً در کار شما مفید خواهد بود! سپس پس از کلیک بر روی دکمه "بعدی"، نصب به طور معمول ادامه می یابد. و در انتها کتیبه "نصب کامل" را مشاهده خواهید کرد.
پس از اتمام نصب، دایرکتوری های کاری بسته Debugging Tools برای ویندوز به صورت زیر خواهد بود:

  • برای نسخه x86:
  • برای نسخه x64:

در این مرحله نصب Debugging Tools برای ویندوز را می توان کامل در نظر گرفت.

نصب ابزارهای Debugging برای ویندوز از طریق فایل msi

اگر هنگام نصب Debugging Tools برای ویندوز با استفاده از دو روش قبلی مشکلی پیش بیاید، ما هنوز یک ابزار دیگر در انبار داریم، قابل اطمینان ترین و تست شده ترین، که به اصطلاح، بیش از یک بار به کمک آمده است. روزی روزگاری، قبل از ادغام در Windows SDK، ابزارهای Debugging برای ویندوز به عنوان یک installer.msi جداگانه در دسترس بودند، که هنوز هم می‌توان آن را یافت، اما در حال حاضر در بطن توزیع SDK ویندوز وجود دارد. از آنجایی که ما قبلاً یک تصویر ISO از Windows SDK در دست داریم، نمی‌توانیم آن را در سیستم نصب کنیم، بلکه به سادگی آن را با استفاده از بایگانی معروف WinRAR یا هر محصول دیگری که با محتویات دیسک‌های ISO کار می‌کند باز کنیم.

پس از باز کردن تصویر، باید به دایرکتوری "Setup" واقع در ریشه بروید و سپس یکی از دایرکتوری ها را انتخاب کنید:

  • برای نصب نسخه 64 بیتی: \Setup\WinSDKDebuggingTools_amd64و فایل dbg_amd64.msi را از این دایرکتوری باز کنید.
  • برای نصب نسخه 32 بیتی: \Setup\WinSDKDebuggingTools و فایل dbg_x86.msi را از این دایرکتوری باز کنید.

پس از اتمام نصب، دایرکتوری های کاری بسته Debugging Tools برای ویندوز به صورت زیر خواهد بود:

  • برای نسخه x86: C:\Program Files (x86)\Debugging Tools for Windows (x86)
  • برای نسخه x64: C:\Program Files\Debugging Tools for Windows (x64)

در این مرحله نصب Debugging Tools برای ویندوز را می توان کامل در نظر گرفت.

اطلاعات اضافی

من نمی دانم این به چه چیزی مرتبط است، شاید به دلیل بی دقتی من، اما پس از نصب Debugging Tools برای ویندوز، نصب کننده مسیر دایرکتوری را با دیباگر در متغیر مسیر سیستم Path تنظیم نمی کند. این محدودیت های خاصی را برای راه اندازی وظایف اشکال زدایی مختلف به طور مستقیم از کنسول اعمال می کند. بنابراین، اگر مسیری وجود نداشته باشد، من به طور مستقل در پنجره می نویسم متغیرهای محیطی مسیر ابزارهای رفع اشکال:

  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

* در مورد شما، مسیرها ممکن است هم به دلیل استفاده از سیستم عامل با اندازه بیت متفاوت و هم به دلیل استفاده از نسخه SDK متفاوت باشد.

برنامه های کاربردی بسته Debugging Tools برای ویندوز می توانند به عنوان برنامه های قابل حمل کار کنند؛ فقط باید دایرکتوری را از سیستم کاری کپی کنید. مایکروسافت ویندوز عملکرد ابزارو از آن به عنوان یک نسخه قابل حمل در سرور تولید استفاده کنید. اما فراموش نکنید که ظرفیت سیستم را در نظر بگیرید!! حتی اگر نصب کامل بسته را روی یک سیستم حیاتی کامل کرده باشید، می توانید بلافاصله پس از نصب شروع به کار کنید، نیازی به راه اندازی مجدد نیست.

ترکیب ابزارهای اشکال زدایی برای ویندوز

و اکنون، در نهایت، ترکیب ابزارهای Debugging برای ویندوز به شرح زیر است:

فایل هدف
adplus.doc اسناد برای ابزار ADPlus.
adplus.exe یک برنامه کنسولی که کار دیباگر cdb را برای ایجاد dumps و فایل های گزارش برای یک یا چند فرآیند به طور خودکار انجام می دهد.
agestore.exe ابزاری برای حذف فایل های منسوخ از فضای ذخیره سازی که توسط سرور نماد یا سرور منبع استفاده می شود.
breakin.exe ابزاری که به شما امکان می‌دهد یک ترکیب شکست سفارشی به فرآیندها ارسال کنید، شبیه به فشار دادن CTRL+C.
cdb.exe دیباگر کنسول حالت کاربر.
convertstore.exe ابزاری برای تبدیل نمادها از 2 لایه به 3 لایه.
dbengprx.exe تکرار کننده (سرور پروکسی) برای اشکال زدایی از راه دور.
dbgrpc.exe ابزاری برای نمایش اطلاعات وضعیت تماس RPC.
dbgsrv.exe فرآیند سرور مورد استفاده برای اشکال زدایی از راه دور.
dbh.exe ابزاری برای نمایش اطلاعات در مورد محتوای یک فایل نماد.
dumpchk.exe ابزار چک کردن تخلیه ابزاری برای بررسی سریع یک فایل dump.
dumpexam.exe ابزاری برای تجزیه و تحلیل یک حافظه خالی نتیجه به %SystemRoot%\MEMORY.TXT خروجی می‌شود.
gflags.exe ویرایشگر پرچم های سیستم جهانی. این ابزار کلیدهای رجیستری و سایر تنظیمات را مدیریت می کند.
i386kd.exe لفاف برای kd. آیا این همان چیزی بود که زمانی kd برای سیستم های مبتنی بر ویندوز NT/2000 برای ماشین های x86 نامیده می شد؟ احتمالا به دلایل سازگاری رها شده است.
ia64kd.exe لفاف برای kd. آیا زمانی برای سیستم های مبتنی بر ویندوز NT/2000 برای ماشین های ia64 kd نامیده می شد؟ احتمالا به دلایل سازگاری رها شده است.
kd.exe دیباگر کنسول حالت هسته.
kdbgctrl.exe ابزار مدیریت اشکال زدایی هسته ابزاری برای مدیریت و پیکربندی اتصال اشکال زدایی هسته.
kdsrv.exe سرور اتصال برای KD. این ابزار یک برنامه کوچک است که اجرا می شود و منتظر اتصال از راه دور می ماند. kd روی کلاینت اجرا می شود و برای رفع اشکال از راه دور به این سرور متصل می شود. سرور و کلاینت هر دو باید از یک اسمبلی Debugging Tools باشند.
kill.exe ابزاری برای پایان دادن به فرآیندها.
list.exe ابزاری برای نمایش محتویات یک فایل بر روی صفحه نمایش. این ابزار مینیاتوری با یک هدف گنجانده شده است - مشاهده متن بزرگ یا فایل های گزارش. فضای کمی از حافظه را اشغال می کند زیرا متن را در قسمت هایی بارگذاری می کند.
logger.exe یک دیباگر مینیاتوری که فقط با یک فرآیند کار می کند. این ابزار logexts.dll را به فضای پردازش تزریق می کند، که همه فراخوانی های تابع و سایر اقدامات برنامه مورد مطالعه را ضبط می کند.
logviewer.exe ابزاری برای مشاهده گزارش های ثبت شده توسط اشکال زدا logger.exe.
ntsd.exe Debugger نمادین مایکروسافت NT (NTSD). یک دیباگر مشابه با cdb با این تفاوت که هنگام راه اندازی یک پنجره متنی ایجاد می کند. مانند cdb، ntsd قادر است هم برنامه های کنسول و هم برنامه های گرافیکی را اشکال زدایی کند.
pdbcopy.exe ابزاری برای حذف نمادهای خصوصی از یک فایل نماد، کنترل نمادهای عمومی موجود در فایل نماد.
remote.exe ابزاری برای اشکال زدایی از راه دور و کنترل از راه دور هر دیباگر کنسول KD، CDB و NTSD. به شما امکان می دهد تمام این اشکال زداهای کنسول را از راه دور اجرا کنید.
rtlist.exe نمایشگر کار از راه دور. این ابزار برای نمایش لیستی از فرآیندهای در حال اجرا از طریق فرآیند سرور DbgSrv استفاده می شود.
symchk.exe ابزاری برای دانلود نمادها از سرور نماد مایکروسافت و ایجاد یک کش نماد محلی.
symstore.exe ابزاری برای ایجاد شبکه یا ذخیره‌سازی نمادهای محلی (2-tier/3-tier). Symbol Storage یک دایرکتوری تخصصی روی دیسک است که مطابق با یک ساختار خاص ساخته شده و حاوی نمادها است. ساختاری از زیرپوشه‌ها با نام‌های یکسان با نام مؤلفه‌ها در فهرست اصلی نمادها ایجاد می‌شود. به نوبه خود، هر یک از این زیرپوشه ها حاوی زیرپوشه های تو در تو هستند که نام های خاصی از هش کردن فایل های باینری به دست می آیند. ابزار symstore پوشه های کامپوننت را اسکن می کند و اجزای جدیدی را به ذخیره نماد اضافه می کند، جایی که هر مشتری می تواند آنها را بازیابی کند. گفته می شود که symstore برای دریافت نمادها از ذخیره سازی 0-tier و قرار دادن آنها در ذخیره سازی 2-tier/3-tier استفاده می شود.
tlist.exe نمایشگر وظیفه. ابزاری برای نمایش لیستی از تمام فرآیندهای در حال اجرا.
umdh.exe ابزار حالت کاربر dump heap. ابزاری برای تجزیه و تحلیل انبوهی از فرآیند انتخاب شده. به شما امکان می دهد پارامترهای مختلفی را برای پشته نمایش دهید.
usbview.exe نمایشگر USB. ابزاری برای مشاهده دستگاه های USB متصل به رایانه.
vmdemux.exe دی مالتی پلکسر ماشین مجازی. چندین لوله با نام برای یک اتصال COM ایجاد می کند. کانال ها برای اشکال زدایی اجزای مختلف ماشین مجازی استفاده می شوند
windbg.exe حالت کاربر و دیباگر حالت هسته با رابط کاربری گرافیکی.

برای شناسایی علل صفحه نمایش های آبی(BSOD) تجزیه و تحلیل تخلیه حافظه مورد نیاز است. در اکثریت قریب به اتفاق موارد، یک minidump که توسط سیستم در صورت بروز خطاهای بحرانی ایجاد می شود، کافی است.
این مقاله حاوی آموزش گام به گامدر نصب و پیکربندی WinDBG - یک ابزار اشکال زدایی قدرتمند که به شما امکان می دهد علت واقعی BSOD را شناسایی کنید.

مرحله 1 - پیکربندی Small Memory Dumps

مرحله 2 - نصب WinDBG

برای تجزیه و تحلیل تخلیه حافظه، باید دیباگر WinDBG را که در SDK ویندوز موجود است نصب کنید. در زمان نوشتن، آخرین موجود نسخه های ویندوز SDK:

  • Windows 10 SDK (دانلود نصب کننده شبکه)
  • Windows 8.1 SDK (دانلود نصب کننده شبکه)

مرحله 3 - نگاشت فایل های .dmp به WinDBG

برای آسان‌تر کردن خواندن و تجزیه و تحلیل حافظه خالی، فایل‌های .dmp را به WinDBG نگاشت کنید. این به شما امکان می‌دهد فایل‌های dump را از اکسپلورر مستقیماً در WinDBG باز کنید بدون اینکه ابتدا آن را راه‌اندازی کنید.


مرحله 4 - راه اندازی یک سرور نماد برای دریافت فایل های نماد اشکال زدایی


نصب و پیکربندی اولیه WinDBG به پایان رسیده است. به منظور تغییر ظاهر آن، می توانید به منو بروید چشم انداز- تنظیمات فونت را با انتخاب پیدا خواهید کرد فونتو تنظیمات پنجره کنسول در گزینه ها.




بالا