Visual Studio: ไม่มีการถอดแยกชิ้นส่วน

ฉันต้องการเรียกใช้ดีบักเกอร์ Visual Studio บนโปรแกรม .Net ที่ถูกทำให้สับสน (เป็นโปรแกรมของฉันเอง - ฉันไม่ได้พยายามถอดรหัสโปรแกรมของคนอื่น)

เมื่อฉันคอมไพล์โปรแกรมด้วย "System.Diagnostics.Debugger.Break()" หรือถ้าฉันแนบดีบักเกอร์เข้ากับกระบวนการที่กำลังทำงานอยู่ ดีบักเกอร์จะแสดงข้อความ "ไม่มีแหล่งที่มา" ฉันเข้าใจสิ่งนี้ - ไม่มีแหล่งที่มาที่สอดคล้องกับเวอร์ชันที่ซับซ้อนของโปรแกรม แต่เมื่อฉันคลิก "แสดงการถอดชิ้นส่วน" มันแสดงหน้าต่างการถอดชิ้นส่วนพร้อมข้อความ "ไม่มีการถอดชิ้นส่วน"

ทำไม ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่ฉันสามารถทำได้เพื่อให้การถอดแยกชิ้นส่วนทำงานได้

ภายใต้ตัวเลือกการแก้ไขข้อบกพร่อง ฉันทำเครื่องหมาย "เปิดใช้งานการแก้ไขข้อบกพร่องระดับที่อยู่" และ "แสดงการแยกส่วนหากไม่มีแหล่งที่มา"

ขอบคุณ.

แก้ไข

เพียงเพื่อพยายามอธิบายเพิ่มเติมอีกเล็กน้อย ...

โปรแกรมที่เป็นปัญหาคือโปรแกรมของฉันเอง และโปรแกรมสร้างความสับสนที่ใช้อยู่ก็เป็นโปรแกรมของฉันเองเช่นกัน โปรแกรม obfuscation รัน ILDAsm.exe แก้ไขโค้ด ILAsm และรัน ILAsm.exe

เห็นได้ชัดว่าความสับสนของฉันทำให้เกิดปัญหา ดังนั้นโปรแกรมจึงทำงานไม่ถูกต้องอีกต่อไป เพื่อให้เข้าใจว่าเหตุใดจึงใช้งานไม่ได้ ฉันต้องการติดตามมัน แต่ด้วยเหตุผลบางอย่างดีบักเกอร์ Visual Studio บอกว่า "ไม่มีการถอดแยกชิ้นส่วน" จากนั้นฉันก็ทำอะไรไม่ได้เลย (เมื่อมีการรันโปรแกรมที่ไม่ซับซ้อนภายใต้ Visual Studio หน้าต่างการแยกส่วนสามารถเปิดได้และแสดงข้อมูลที่คาดหวัง เป็นเพียงเวอร์ชันที่สับสนเท่านั้นที่ก่อให้เกิดปัญหานี้กับดีบักเกอร์ VS)

แก้ไข 2

ไม่สามารถหาคำตอบสำหรับคำถามของฉันได้ แต่ตอนนี้ฉันมีวิธีแก้ปัญหาแล้ว

ฉันได้ติดตั้ง WinDbg แล้วและยืนยันว่าสามารถแนบไปกับโปรแกรมที่สับสนของฉันได้ และอย่างน้อยก็สามารถทำขั้นตอนเดียวและแสดงตำแหน่งการดำเนินการปัจจุบันในหน้าต่างการแยกชิ้นส่วน แต่ฉันไม่เคยใช้ WinDbg มาก่อน และมันก็ดูน่ากังวลนิดหน่อย

ฉันได้ทำตามคำแนะนำที่เห็นหลายแห่งเพื่อโหลด sos.dll ลงใน WinDbg บางทีนั่นอาจจะช่วยได้

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


person RenniePet    schedule 15.07.2011    source แหล่งที่มา
comment
มันเป็นโปรแกรมของฉันเอง - สมมุติว่าคุณมีซอร์สโค้ด แก้ปัญหานั้นเหรอ?   -  person Mitch Wheat    schedule 15.07.2011
comment
ไม่ ปัญหาของฉันคือความยุ่งเหยิงของฉันทำให้โปรแกรมไม่ทำงานในลักษณะที่ไม่ชัดเจน มันจะช่วยให้เข้าใจได้ง่ายขึ้นว่าฉันสามารถติดตามโปรแกรมที่สับสนและดูว่าโปรแกรมพังตรงไหนหรือไม่   -  person RenniePet    schedule 15.07.2011
comment
ดู stackoverflow.com /questions/5670626/ และ stackoverflow.com/questions/5761202/   -  person RenniePet    schedule 15.07.2011
comment
RenniePet: คุณแน่ใจหรือว่าการสร้างความสับสนเป็นสาเหตุของปัญหาของคุณ?   -  person Mitch Wheat    schedule 15.07.2011
comment
ดูการแก้ไข ขอบคุณสำหรับความสนใจของคุณ   -  person RenniePet    schedule 15.07.2011


คำตอบ (1)


ตกลง ฉันบังเอิญสะดุดกับสิ่งที่ฉันทำผิด

ดังที่ฉันพูดถึงในการแก้ไขคำถามครั้งแรก การสร้างความสับสนของฉันเสร็จสิ้นโดยการเรียกใช้ ILDAsm.exe ปรับเปลี่ยนคำสั่ง ILAsm จากนั้นเรียกใช้ ILAsm.exe ปรากฎว่าฉันไม่มีตัวเลือก /Debug ในการรัน ILAsm.exe ดังนั้นแม้ว่า Visual Studio builds ของฉันจะเป็น Debug builds แต่การแปลง JIT ณ รันไทม์นั้นเป็น Release/Optimize Conversions

ด้วยการระบุ /Debug บน ILAsm.exe ฉันได้รับไฟล์ PDB และเมื่อ Visual Studio debugger เชื่อมต่อกับโปรแกรมของฉัน ฉันจะได้รับการแสดงซอร์สโค้ด IL และหากฉันร้องขอ ฉันก็แยกส่วนการแสดงผลด้วย ตอนนี้ทุกอย่างเป็นไปด้วยดี!

person RenniePet    schedule 07.08.2011