TN063: Internet นามสกุล Dll การดีบัก

ถ้าคุณได้เขียนส่วนขยายเซิร์ฟเวอร์อินเทอร์เน็ต DLL คุณอาจจะสนใจในการทำงานภายใต้การดีบักเกอร์เพื่อให้คุณสามารถติดตามการดำเนินการ จุดสั่งหยุดการตั้งค่า หรือค่าตัวแปรของจอภาพหลังจากที่เรียกว่าส่วนขยาย ได้รับ Microsoft Internet Information Server (IIS) ขึ้น และเรียกใช้ DLL ของคุณในการดีบักเกอร์มีเล่ห์เหลี่ยมเล็กน้อย คุณจำเป็นต้องค้นหาเซิร์ฟเวอร์ที่เงียบสงบที่คุณสามารถแก้จุดบกพร่อง DLL ของคุณในการตั้งค่าการควบคุม เมื่อคุณได้พบกับทรัพยากร คุณสามารถเริ่มต้นการตรวจแก้จุดบกพร่องของ DLL?

เนื่องจากความแตกต่างระหว่างรุ่น 3.0 และของ IIS 4.0 คุณจำเป็นต้องทราบว่ารุ่นใดที่คุณจะใช้ในการตรวจแก้จุดบกพร่องของ DLL?

ตรวจแก้จุดบกพร่องใช้ Internet Information Server (3.0 และรุ่นก่อนหน้า)

ทำตามขั้นตอนเหล่านี้เพื่อดีบัก Internet Server นามสกุล DLL ที่ใช้ IIS 3.0:

  1. หยุดการเผยแพร่บริการ IIS โดยใช้ตัวจัดการ IIS หรือการหยุดบริการ ด้วยไอคอน Services ใน Windows NT Advanced Server Control Panel หมายเหตุว่า คุณต้องหยุดบริการสามทั้งหมดแม้ว่าคุณมีเฉพาะการดีบักส่วนขยายของเวิลด์ไวด์เว็บบริการการประกาศ เมื่อต้องการทำสิ่งต่าง ๆ ได้ง่าย คุณอาจต้องการให้การบริการต่าง ๆ "ด้วยตนเอง" เริ่มต้นใน'แผงควบคุม'เพื่อให้คุณสามารถหลีกเลี่ยงขั้นตอนนี้ในภายหลังในการพัฒนาของคุณ?

  2. เริ่ม Microsoft Visual c ++ และคลิกที่คำสั่งปิดพื้นที่ทำงานบนเมนูแฟ้มเพื่อปิดพื้นที่ทำงานที่เปิดอยู่ใด ๆ?

  3. บนเมนูแฟ้มคลิกพื้นที่ทำงานที่เปิดเพื่อเปิด INETINFOEXE โปรแกรม แฟ้มนี้อยู่ในไดเรกทอรีที่คุณติดตั้ง Microsoft Internet Information Server?

  4. บนเมนูโครงการคลิกตั้งค่าแล้วคลิกแท็บการตรวจแก้จุดบกพร่องในกล่องโต้ตอบการตั้งค่าโครงการ?

  5. โดยทั่วไปเลือกในกล่องประเภทพิมพ์ต่อไปนี้ในกล่องข้อความของโปรแกรมอาร์กิวเมนต์:

    -e W3Svc

  6. เลือกDll ที่เพิ่มเติมจากรายการแบบหล่นลงของประเภท แล้ว ในกล่องชื่อท้องถิ่นระบุเส้นทางและชื่อนามสกุล DLL หรือ Dll ทำให้แน่ใจว่า กล่องกาเครื่องหมายอยู่ถัดจากแต่ละถูกทำเครื่องหมายของคุณ?

  7. คลิกOKเพื่อปิดกล่องโต้ตอบการตั้งค่าโครงการ?

  8. ตรวจสอบให้แน่ใจว่าจะPDB แฟ้ม DLL ของคุณอยู่ในไดเรกทอรีเดียวเป็น Dll คุณวางแผนการตรวจแก้จุดบกพร่อง?

เคล็ดลับในการตรวจแก้จุดบกพร่อง

IIS สามารถเรียกใช้เป็นโปรแกรมประยุกต์แบบโต้ตอบ ทำการดีบักได้ง่ายขึ้นมาก การทำเช่นนี้ คุณจำเป็นต้องทำการเปลี่ยนแปลงบางอย่างกับระบบของคุณ สำหรับบัญชีผู้ใช้ที่คุณกำลังจะเรียกใช้เซิร์ฟเวอร์ภายใต้ คุณจำเป็นต้องเพิ่มสิทธิพิเศษบางอย่าง?

เมื่อต้องการเพิ่มสิทธิ์ เรียกใช้ตัวจัดการผู้ใช้ (ถ้าคุณกำลังใช้ Windows NT 3.51 รัน MUSRMGREXE ถ้าคุณกำลังใช้ Windows NT 4.0 เรียกใช้ USRMGREXE) คลิกสิทธิ์ของผู้ใช้จากเมนูนโยบาย เลือกกล่องกาเครื่องหมายแสดงสิทธิ์ของผู้ใช้ขั้นสูง จากนั้นเลือกการกระทำที่เป็นส่วนหนึ่งของระบบปฏิบัติการจากรายการแบบหล่นลงที่ด้านขวา และเพิ่มบัญชีผู้ใช้?

ทำซ้ำกระบวนการนี้ด้วยสร้างการรักษาความปลอดภัยตรวจสอบบัญชี(ยังอยู่ในรายการแบบหล่นลงบนด้านขวา) ตรวจสอบให้แน่ใจว่า บริการอินเทอร์เน็ตทั้งหมด (WWW, ftp และ gopher) จะหยุดทำงาน และ INETINFOEXE ไม่ทำงาน (ใช้ TLIST เพื่อตรวจสอบ) ออกจากระบบ และเข้าสู่กลับ คุณสามารถโหลดได้แล้ว IIS ด้วยบรรทัดคำสั่ง:

INetInfo.Exe -e W3Svc

โหลด IIS ภายใต้โปรแกรมดีบัก (ตัวอย่างเช่น ใต้ WinDbg), ใช้บรรทัดคำสั่งต่อไปนี้:

WinDbg INetInfo.Exe -e W3Svc

คุณพร้อมที่จะไป ใน Visual c ++ ชี้แก้จุดบกพร่องบนเมนูสร้างนั้นแล้ว คลิกไปที่ การกระทำนี้เริ่มประกาศบริการ WWW และดีบักเกอร์จะทราบสัญลักษณ์ใน DLL ของคุณ คุณสามารถละเว้นคำเตือนว่า แฟ้มนั้นไม่มีข้อมูลการตรวจแก้จุดบกพร่อง?

เมื่อคุณปิดโปรแกรม Visual c ++ บันทึกพื้นที่ทำงานสำหรับ INETINFOEXE วิธีนี้ คุณสามารถหลีกเลี่ยง reentering การตั้งค่าสำหรับเซสชันการตรวจแก้จุดบกพร่อง เพียงแค่เปิดการ INETINFOMDS แฟ้มพื้นที่ทำงานเมื่อคุณพร้อมที่จะเริ่มการดีบักเกอร์อีกครั้ง?

Dll ของแคช

คุณสามารถปรับการตั้งค่ารีจิสทรีที่ HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/พารามิเตอร์/CacheExtensions ต้องมีการเตรียมใช้งานใหม่ Dll ในแต่ละครั้งที่มีใช้เซิร์ฟเวอร์ ถ้าการตั้งค่านี้คือ 1 เซิร์ฟเวอร์จะเก็บ Dll ที่โหลดอยู่ในหน่วยความจำที่นานที่สุดเท่าที่เป็นไปได้ นี่คือค่าเริ่มต้นสำหรับเซิร์ฟเวอร์ เนื่องจากมันช่วยให้เซิร์ฟเวอร์ให้ได้ประสิทธิภาพสูงสุด และควรเท่านั้นถูกเปลี่ยนแปลงหากคุณใช้เซิร์ฟเวอร์สำหรับการดีบัก ถ้าคุณทำการตั้งค่า 0 เซิร์ฟเวอร์จะเสมอโหลดนามสกุล Dll ในแต่ละครั้งที่มีใช้?

การบังคับให้เซิร์ฟเวอร์เพื่อโหลด DLL ของคุณจะมีประโยชน์เมื่อ DLL ของคุณอาจจะหยุดทำ หรือ upsetting ข้อมูลสำหรับแต่ละอินสแตนซ์ใด ๆ ที่จะรักษา โดยการบังคับให้เซิร์ฟเวอร์ DLL การเตรียมใช้งานใหม่ คุณสามารถขอรับ DLL ของคุณกลับเข้าสู่สถานะแบบฉบับกับความพยายามเล็ก ๆ ต้องแน่ใจว่าการทดสอบ DLL ของคุณโดยใช้การตั้งค่าปกติของ CacheExtensions อย่างไรก็ตาม เพื่อให้แน่ใจว่า รหัสใน DLL ของคุณไม่สมบูรณ์ขึ้นที่สถานะเริ่มต้น?

ตรวจแก้จุดบกพร่องใช้ Internet Information Server (4.0 และรุ่นที่ใหม่กว่า)

มีหลายวิธีในการสร้างสภาพแวดล้อมสำหรับการดีบัก Internet Server นามสกุล Dll และคอมโพเนนต์ของเซิร์ฟเวอร์ของคุณเมื่อใช้ IIS 4.0 หรือรุ่นที่ใหม่กว่า ถ้าคุณกำลังใช้โปรแกรมดีบักความสามารถแนบไปกับกระบวนการ Windows NT คุณสามารถใช้ฟังก์ชันนี้เมื่อต้องการตรวจแก้จุดบกพร่องของคอมโพเนนต์หรือนามสกุลของคุณ ตัวอย่างเช่น ถ้าคุณกำลังดีบัก ด้วย Visual c ++ ผ่านขั้นตอนต่อไปนี้:

  1. เริ่มกระบวนการ iisadmin สามารถทำได้จากบรรทัดคำสั่งด้วยคำสั่งเริ่มสุทธิ iisadmin นอกจากนี้คุณยังสามารถใช้กล่องโต้ตอบบริการจาก'แผงควบคุม'เพื่อเริ่มการบริการ IIS Admin ซึ่งจะเริ่ม iisadmin?

  2. เริ่มการทำงานของ Visual c ++ ชี้ไปที่การเริ่มต้นการตรวจแก้จุดบกพร่องบนเมนูสร้างและคลิกแนบกระบวนการ?

  3. เลือกกล่องกาเครื่องหมายแสดงขั้นตอนระบบ?

  4. เลือกกระบวนการ inetinfo จากรายการ และคลิกตกลง?

  5. เริ่มต้นบริการ w3svc สามารถสร้างได้จากบรรทัดคำสั่งด้วยคำสั่งnet start w3svc นอกจากนี้คุณยังสามารถใช้กล่องโต้ตอบบริการใน'แผงควบคุม'เพื่อเริ่มการทำงานของ World Wide Web Publishing Service?

ถ้าคุณกำลังใช้ดีบักเกอร์ไม่สามารถแนบไปกับกระบวนการ Windows NT ผ่านขั้นตอนต่อไปนี้เพื่อสร้างสภาพแวดล้อมที่เหมาะสมที่ตรวจแก้จุดบกพร่อง:

  1. เปิดกล่องโต้ตอบบริการใน'แผงควบคุม'?

  2. เลือกบริการ IIS Admin และคลิกที่ปุ่มเริ่มต้น?

  3. เลือกกล่องกาเครื่องหมายอนุญาตให้มีการบริการให้ Interact กับเดสก์ท็อปและคลิกตกลง?

  4. ทำซ้ำขั้นตอนที่ 2 และ 3 สำหรับกระบวนการทั้งหมดที่เรียกใช้ภายใต้กระบวนการ IIS Admin ตัวอย่าง World Wide Web Publishing Service และ FTP Publishing Service?

  5. ใช้ Registry Editor (REGEDIT) การเพิ่มคีย์ย่อยชื่อInetinfo.Exeคีย์ HKEY_LOCAL_MACHINE/ซอฟต์แวร์/Microsoft/WindowsNT/CurrentVersion/รูป แฟ้มปฏิบัติการตัวเลือก?

  6. เพิ่มรายการต่อไปนี้เพื่อคีย์นี้ใหม่:

    ดีบักเกอร์ = lt; DebuggerExeName > โดยที่ DebuggerExeName คือ เส้นทางแบบเต็มในการดีบักเกอร์ที่คุณใช้?

เมื่อมีเริ่มบริการ World Wide Web Publishing ดีบักเกอร์ของคุณจะยังสามารถเปิดใช้ ขณะนี้คุณสามารถกำหนดจุดสั่งหยุดที่เหมาะสมในอินเทอร์เน็ตเซิร์ฟเวอร์ของคุณนามสกุล DLL?

คุณจะไม่สามารถกำหนดจุดสั่งหยุดในโค้ดต้นฉบับของคอมโพเนนต์จนกระทั่งมีการโหลดคอมโพเนนต์ลงในหน่วยความจำ เมื่อต้องการทำเช่นนี้ เริ่ม Internet Explorer และมุมมองเพจ ASP ที่ประกอบด้วยวัตถุ ทันทีที่โหลดหน้า คุณควรตั้งค่าจุดสั่งหยุดในคอมโพเนนต์ของคุณ คลิกฟื้นฟูเพื่อดูหน้าอีกครั้ง และก่อให้เกิดจุดสั่งหยุดคุณเลือก ถ้าคอมโพเนนต์ไม่สามารถโหลดแม้แต่ครั้งเดียว (ตัวอย่างเช่น ถ้าข้อบกพร่องเกิดขึ้นในรหัสเริ่มต้นของคอมโพเนนต์) คุณจำเป็นต้องโหลดคอมโพเนนต์ DLL ก่อนที่จะเริ่มต้นเซสชันการตรวจแก้จุดบกพร่อง (ดูขั้นตอนที่ 11 ด้านล่าง)

ในบางกรณี คุณอาจไม่สามารถใช้อย่างใดอย่างหนึ่งในสองขั้นตอนด้านบน ถ้าคุณมีอุปสรรคในการใช้กลยุทธ์เหล่านี้อย่างใดอย่างหนึ่ง มีอยู่สามวิธีการแบบ ซึ่งได้ถูกอธิบายไว้ในรุ่นก่อนหน้าของ IIS วิธีการนี้ที่สามต้องการกำหนดสิทธิ์การรักษาความปลอดภัยของ Windows NT ตลอดจนการเปลี่ยนแปลงรีจิสทรี นอกจากนี้มันยังจะปิดความสามารถในการเรียกใช้ IIS เป็นบริการ วิธีการนี้ควรจะใช้การถ้ามีการล้มเหลวกลยุทธ์สองที่ก่อนหน้านี้เท่านั้น?

  1. ใช้ตัวจัดการผู้ใช้เครื่องมือการจัดการโดเมน (USRMGR) เพิ่มเข้าสู่ระบบเป็นบริการ Act เป็นส่วนหนึ่งของระบบปฏิบัติการและสิทธิ์การรักษาความปลอดภัยการ Generate auditsเครื่องคอมพิวเตอร์ไปยังบัญชี Windows NT คุณจะใช้เมื่อทำการดีบักส่วนขยายเซิร์ฟเวอร์อินเทอร์เน็ต DLL?

  2. ใช้ Distributed COM Configuration อรรถประโยชน์ (DCOMCNFG) เพื่อเปลี่ยนแปลงลักษณะเฉพาะของบริการ IIS Admin ไปบัญชีผู้ใช้ที่คุณจะใช้สำหรับการดีบัก?

  3. ใช้ Registry Editor (REGEDIT) การลบคำสำคัญ LocalService จากคีย์ทั้งหมดที่เกี่ยวข้องกับ IISADMIN ย่อยภายใต้ HKEY_CLASSES_ROOT/AppID คำสำคัญนี้อาจพบในการคีย์ย่อยต่อไปนี้:

    {61738644-F196-11D0-9953-00C04FD919C1 } / / IIS WAMREG admin Service

    {9F0BD3A0-EC01-11D0-A6A0-00A0C922E752 } / / IIS Admin Crypto Extension

    {A9E69610-B80D-11D0-B9B9-00A0C922E750 } / / บริการ IISADMIN

    อาจพบคำสำคัญ LocalService ในคีย์ย่อยเพิ่มเติมของ AppID?

  4. เพิ่มคีย์ย่อย LocalServer32 คีย์ทั้งหมดที่เกี่ยวข้องกับ IISADMIN ย่อยภายใต้โหนด CLSID ของรีจิสทรี นี้จะรวมคีย์ย่อยที่สอดคล้องกับคีย์ย่อยที่คุณเอาออกไปในขั้นตอนก่อนหน้าทั้งหมด ตั้งค่าเริ่มต้นของคีย์เหล่านี้ใหม่ให้ lt เส้นทาง > w3svc -e \inetinfo.exe (<path>เป็นปกติ "c:\winnt\system32\inetsrv")

  5. หยุด WWW และ FTP บริการ จาก Microsoft Management Console หรือกล่องโต้ตอบบริการใน'แผงควบคุม'?

  6. เริ่มการทำงานของ Visual c ++ และเลือกแท็บการตรวจแก้จุดบกพร่องในกล่องโต้ตอบการตั้งค่าโครงการ?

  7. พิมพ์เส้นทางต่อไปนี้ในฟิลด์Executable สำหรับเซสชันการตรวจแก้จุดบกพร่อง:

    C:\WINNT\System32\Inetsrv\Inetinfo.exe

  8. พิมพ์ต่อไปนี้ในฟิลด์โปรแกรมอาร์กิวเมนต์:

    -e w3svc

  9. เลือกแท็บการเชื่อมโยงในกล่องโต้ตอบการตั้งค่าโครงการ?

  10. ป้อนชื่อและเส้นทางของส่วนขยายเซิร์ฟเวอร์อินเทอร์เน็ต DLL ที่คุณกำลังทำการดีบักในฟิลด์ชื่อแฟ้มผลลัพธ์?

  11. เลือก เพิ่มคอมโพเนนต์ของ DLL ลงในรายการเพิ่มเติม Dllที่ถูกโหลดก่อนเริ่มแอปพลิเคชัน นี้จะช่วยให้คุณสามารถตั้งค่าจุดสั่งหยุดในรหัสเริ่มต้นของคอมโพเนนต์?

  12. คลิกที่ปุ่มGoเพื่อเริ่มต้นเซสชันการตรวจแก้จุดบกพร่อง?

หมายเหตุnbsp  หลังจากที่คุณเสร็จเซสชันการตรวจแก้จุดบกพร่อง คุณต้องย้อนกลับขั้นตอนที่ 5 ถึง 1 เพื่อคืนค่าการตั้งค่าก่อนหน้า และอนุญาตให้ IIS ให้รันเป็นบริการ(&N)?

หมายเหตุด้านเทคนิคตามหมายเลข|nbsp หมายเหตุด้านเทคนิคตามประเภท(&N)

Index