ไม่สามารถโหลด SOS ใน WinDbg


132

ความเป็นมา: ฉันเพิ่งเคยใช้ WinDbg และพยายามทำให้มันทำงานเป็นครั้งแรก ฉันต้องการตรวจสอบการถ่ายโอนข้อมูลหน่วยความจำที่ฉันนำมาจากไซต์ ASP.NET 4 ที่ทำงานอยู่ซึ่งโฮสต์ใน IIS 7 บน Windows Server 2008 (x86) และดาวน์โหลดลงในเครื่องของฉัน

ฉันติดตั้งเครื่องมือดีบักและเปิด WinDbg เป็นครั้งแรกโดยเปิดการถ่ายโอนข้อมูลความผิดพลาด ฉันไปที่ไฟล์ | Symbol File Pathและกำหนดเส้นทาง*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*และรอให้สัญลักษณ์ทั้งหมดโหลด

เมื่อพยายามโหลด SOS ฉันพบปัญหา ก่อนอื่นฉันลองใช้คำสั่งต่อไปนี้ ...

.loadby sos mscorwks

... Unable to find module 'mscorwks'และได้รับการตอบสนอง

หลังจากกำจัดสิ่งสกปรกบนเว็บฉันพยายามโหลด mscorwks โดยดำเนินการคำสั่งต่อไปนี้ ...

sxe ld mscorwks.dll
g

... และได้รับการตอบกลับ "ไม่มีข้อผิดพลาดในการดีบักที่รันได้ใน" g ""

ฉันคัดลอก SOS.dll (จาก C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) ลงในไดเร็กทอรี WinDbg แล้วลอง ...

.load sos

... และได้รับข้อผิดพลาด ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

ฉันไม่ค่อยแน่ใจว่าจะดำเนินการอย่างไร ฉันแค่ต้องการโหลด SOS และขุดดูไฟล์ดัมพ์นี้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

ฟาย ... ฉันกำลังพยายามเปิดไฟล์ดัมพ์ใน Windows 7 เวอร์ชัน 64 บิตพร้อม Windbg เวอร์ชัน 64 บิต

คำตอบ:


203

CLR runtime dll ถูกเปลี่ยนชื่อเป็นclr.dll. NET 4 ดังนั้นในการโหลด SOS เวอร์ชันที่ถูกต้องคุณต้องปรับ.loadbyคำสั่งของคุณ ได้แก่

.loadby sos clr

นอกจากนี้หากคุณใช้ 64 บิตคุณควรติดตั้งDebugging Toolsเวอร์ชัน 32 บิตสำหรับ Windowsด้วยเพื่อที่จะดีบักแอพ 32 บิต พวกเขาติดตั้งเคียงข้างกันดังนั้นจึงไม่มีปัญหาในการมีทั้งเวอร์ชัน 32 บิตและ 64 บิตในเครื่องเดียวกัน

ฉันขอคำแนะนำในการคัดลอก SOS.dll SOS ต้องตรงกับเวอร์ชันที่แน่นอนของเฟรมเวิร์กตราบใดที่คุณโหลดจากไดเร็กทอรีเฟรมเวิร์กโดยใช้.loadbyคุณก็พร้อมแล้ว


ฉันพบว่ามันท้าทายที่จะรับทั้งสองอย่างในระบบของฉันเนื่องจากตัวติดตั้งล่าสุดตรวจจับประเภท CPU โดยอัตโนมัติ มีแฟล็กการลบล้างที่คุณรู้จักสำหรับ msi หรือไม่? ฉันกำลังจะติดตั้ง WinDbg เวอร์ชัน 32 บิต แต่ไม่รู้ว่าจะเกิดอะไรขึ้น
Dave

5
@Dave: อาจจะช้าเกินไป แต่ตามหน้าเว็บการติดตั้งพบได้ที่นี่: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspxคุณสามารถเลือกที่จะติดตั้ง Redistributable Packages ซึ่งทำให้ MSI สำหรับสถาปัตยกรรมแต่ละรุ่นได้ที่นี่ : C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools สำหรับ Windows
Aaron Lerch

ถ้าฉันบอกว่าฉันจะได้รับ.loadby sos clr Unable to find module 'clr'ฉันกำลังพยายามดีบัก. NET 4 ด้วย x64 WinDbg
Csaba Toth

2
@CsabaToth มันเป็นการถ่ายโอนข้อมูลหรือคุณกำลังทำการดีบักอยู่? หากคุณกำลังทำการดีบักแบบสด CLR อาจยังไม่ได้โหลด คุณสามารถทำได้sxe ld clrเพื่อหยุดเมื่อโหลด CLR จากนั้นคุณสามารถโหลด SOS ณ จุดนั้นได้
Brian Rasmussen

@BrianRasmussen มันเป็นไฟล์ปฏิบัติการที่รวบรวมได้ ถ้าฉันดูที่หน้าต่าง Modules ก็โหลด clr
Csaba Toth

18

คำสั่ง WinDbg 'g' หมายถึง [Continue]

เนื่องจากคุณกำลังเปิดไฟล์ดัมพ์จึงไม่มีวิธี 'ดำเนินการต่อ' แต่จะมีเฉพาะหน่วยความจำกระบวนการเท่านั้น

ดังนั้นข้อความ "ไม่มีRunnableข้อผิดพลาดการแก้ไขข้อบกพร่องใน 'g'" เป็นตรรกะในกรณีของคุณตั้งแต่ขั้นตอนที่ไม่ได้ทำงาน

เกี่ยวกับการโหลด SOS เวอร์ชันที่ถูกต้องให้ใช้คำสั่งต่อไปนี้ขึ้นอยู่กับเวอร์ชัน. NET

.NET 4 และสูงกว่า. load โดย sos

.NET 3.5 และ 2 .load โดย sos mscorwks

.NET 1.0 และ 1.1 .load clr10 \ sos


1

คำตอบข้างต้นต้องได้รับการปรับปรุงเนื่องจากในช่วงเวลาที่ผ่านมาสิ่งต่างๆได้ง่ายขึ้นในการจัดการกับการโหลด sos

JOHN ROBBINS มีบทความดีๆเกี่ยวกับเรื่องนี้ดูว่าเซิร์ฟเวอร์สัญลักษณ์ของ Microsoft ได้รับการกำหนดค่าในเส้นทางไฟล์สัญลักษณ์และเรียกใช้! วิเคราะห์ -v บนพรอมต์ windbg สิ่งนี้จะทำเคล็ดลับที่จะดาวน์โหลดไฟล์ sos ที่เกี่ยวข้อง เพื่อตรวจสอบการรัน .chain ในพรอมต์และคุณจะเห็น dll ที่โหลด


บทความของ John Robbins ถูกย้ายไปที่wintellect.com/…
Ryan Hill - MSFT

0

เพิ่งพบปัญหาคล้ายกันในการโหลด SOS และได้รับ "โมดูลที่ระบุไม่พบ" มาพร้อมกับวิธีแก้ปัญหาที่แตกต่างกันดังนั้นหากโซลูชันที่นี่ไม่สามารถช่วยคุณได้ให้ลองทำสิ่งนี้:

.loadby sos clr - ไม่พบโมดูลที่ระบุ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.