เหตุใด Visual Studio 2005 จึงสร้าง.pdb
ไฟล์เมื่อคอมไพล์ในรีลีส? ฉันจะไม่แก้ไขข้อบกพร่องของบิลด์ออกดังนั้นทำไมจึงสร้างขึ้น
เหตุใด Visual Studio 2005 จึงสร้าง.pdb
ไฟล์เมื่อคอมไพล์ในรีลีส? ฉันจะไม่แก้ไขข้อบกพร่องของบิลด์ออกดังนั้นทำไมจึงสร้างขึ้น
คำตอบ:
เนื่องจากไม่มีไฟล์ PDB จึงเป็นไปไม่ได้ที่จะทำการดีบักบิลด์ "Release" ด้วยสิ่งอื่นนอกจากการดีบักระดับที่อยู่ การปรับให้เหมาะสมทำตัวเลขในรหัสของคุณจริง ๆ ทำให้ยากแก่การค้นหาผู้กระทำผิดหากมีบางอย่างผิดปกติ (พูดว่ามีข้อยกเว้นเกิดขึ้น) แม้การตั้งค่าเบรกพอยต์นั้นยากมากเพราะบรรทัดของซอร์สโค้ดไม่สามารถจับคู่แบบหนึ่งต่อหนึ่งกับ (หรือแม้กระทั่งในลำดับเดียวกับ) รหัสแอสเซมบลีที่สร้างขึ้น ไฟล์ PDB ช่วยให้คุณและดีบักเกอร์ทำงานได้ดีขึ้นอย่างมาก
คุณระบุว่าหากซอฟต์แวร์ของคุณพร้อมสำหรับการเปิดตัวคุณควรทำการดีบักทั้งหมดแล้ว แม้ว่าจะเป็นเรื่องจริง แต่ก็มีประเด็นสำคัญสองประการที่ควรคำนึงถึง:
คุณควรยังการทดสอบและการแก้ปัญหาการสมัครของคุณ (ก่อนที่คุณจะปล่อยมัน) โดยใช้ "ปล่อย" สร้าง นั่นเป็นเพราะการเปิดใช้งานการปรับให้เหมาะสม (โดยค่าเริ่มต้นถูกปิดใช้งานภายใต้การกำหนดค่า "ดีบั๊ก") ในบางครั้งอาจทำให้เกิดข้อบกพร่องเล็กน้อยเพื่อให้ปรากฏว่าคุณไม่จับ เมื่อคุณทำการแก้ไขข้อบกพร่องนี้คุณจะต้องการสัญลักษณ์ PDB
ลูกค้ามักรายงานกรณีและข้อผิดพลาดที่เกิดขึ้นภายใต้เงื่อนไข "อุดมคติ" เท่านั้น สิ่งเหล่านี้เป็นสิ่งที่แทบจะเป็นไปไม่ได้ในการทำซ้ำในห้องปฏิบัติการเพราะพวกเขาต้องพึ่งพาการกำหนดค่าที่แปลกประหลาดของเครื่องของผู้ใช้คนนั้น หากพวกเขาเป็นลูกค้าที่มีประโยชน์โดยเฉพาะพวกเขาจะรายงานข้อยกเว้นที่ถูกโยนและให้การติดตามสแต็กแก่คุณ หรือพวกเขาจะให้คุณยืมเครื่องเพื่อดีบักซอฟต์แวร์ของคุณจากระยะไกล ในกรณีใดกรณีหนึ่งคุณจะต้องการให้ไฟล์ PDB ช่วยเหลือคุณ
โปรไฟล์ควรเสมอทำได้ใน "ปล่อย" สร้างด้วยการเพิ่มประสิทธิภาพการเปิดใช้งาน และอีกครั้งไฟล์ PDB มีประโยชน์เพราะอนุญาตให้ทำคำสั่งแอสเซมบลีที่ถูกแมปกลับไปยังซอร์สโค้ดที่คุณเขียนจริง
คุณไม่สามารถย้อนกลับและสร้างไฟล์ PDB ได้ หลังจากคอมไพล์แล้ว *หากคุณไม่ได้สร้างมันในระหว่างการสร้างคุณเสียโอกาส ไม่สร้างความเสียหายอะไรเลย หากคุณไม่ต้องการกระจายพวกเขาคุณสามารถละเว้นพวกเขาจากไบนารีของคุณ แต่ถ้าคุณตัดสินใจในภายหลังว่าคุณต้องการพวกเขาคุณจะโชคดี ดีกว่าที่จะสร้างและเก็บสำเนาไว้เสมอในกรณีที่คุณต้องการ
หากคุณต้องการปิดพวกเขาจริงๆนั่นเป็นตัวเลือกเสมอ ในหน้าต่างคุณสมบัติของโครงการของคุณตั้งค่าตัวเลือก "Debug Info" เป็น "none" สำหรับการกำหนดค่าใด ๆ ที่คุณต้องการเปลี่ยน
อย่างไรก็ตามโปรดทราบว่าการกำหนดค่า "Debug" และ "Release" ทำโดยค่าเริ่มต้นใช้การตั้งค่าที่แตกต่างกันสำหรับการเปล่งข้อมูลการดีบัก คุณจะต้องการรักษาการตั้งค่านี้ ตัวเลือก "ข้อมูลการดีบัก" ถูกตั้งค่าเป็น "เต็ม" สำหรับการสร้างการดีบักซึ่งหมายความว่านอกเหนือจากไฟล์ PDB ข้อมูลสัญลักษณ์การดีบักจะถูกฝังลงในแอสเซมบลี นอกจากนี้คุณยังได้รับสัญลักษณ์ที่สนับสนุนคุณสมบัติเจ๋ง ๆ เช่นแก้ไขและดำเนินการต่อ ในโหมด Release ตัวเลือก "pdb-only" จะถูกเลือกซึ่งเสียงจะรวมเฉพาะไฟล์ PDB เท่านั้นโดยไม่มีผลกับเนื้อหาของชุดประกอบ ดังนั้นจึงไม่ใช่เรื่องง่ายเพียงแค่มีหรือไม่มีไฟล์ PDB ใน/bin
ไดเรกทอรีของคุณ แต่สมมติว่าคุณใช้ตัวเลือก "pdb-only" ไฟล์ PDB '
*ตามที่Marc Sherman ให้ความเห็นตราบใดที่ซอร์สโค้ดของคุณยังไม่เปลี่ยนแปลง (หรือคุณสามารถดึงรหัสต้นฉบับจากระบบควบคุมเวอร์ชัน) คุณสามารถสร้างมันขึ้นมาใหม่และสร้างไฟล์ PDB ที่ตรงกัน อย่างน้อยก็มักจะ วิธีนี้ใช้ได้ผลเกือบตลอดเวลา แต่คอมไพเลอร์ไม่รับประกันว่าจะสร้างไบนารีที่เหมือนกันในแต่ละครั้งที่คุณรวบรวมรหัสเดียวกันดังนั้นอาจมีความแตกต่างเล็กน้อย ถ้าคุณทำการอัปเกรดเป็น toolchain ของคุณในระหว่างนี้ (เช่นการใช้เซอร์วิสแพ็คสำหรับ Visual Studio) PDB นั้นมีโอกาสที่จะตรงกันน้อยลง เพื่อรับประกันรุ่นที่เชื่อถือได้ของอดีต postfactoไฟล์ PDB คุณจะต้องเก็บถาวรไม่เพียง แต่ซอร์สโค้ดในระบบควบคุมเวอร์ชันของคุณ แต่ยังเป็นไบนารีสำหรับ toolchain ทั้งบิลด์ของคุณเพื่อให้แน่ใจว่าคุณสามารถสร้างการกำหนดค่าสภาพแวดล้อมการสร้างของคุณได้อย่างแม่นยำ มันไปโดยไม่บอกว่ามันง่ายกว่าที่จะเพียงแค่สร้างและเก็บไฟล์ PDB
.reload /i foo.dll
ฉันเช่นนี้ นั่นจะโหลด foo.pdb แม้ว่า foo.pdb จะถูกสร้างขึ้นหลังจากปล่อย foo.dll
PDB สามารถสร้างขึ้นสำหรับการเช่นเดียวกับการRelease
Debug
ตั้งไว้ที่ (ใน VS2010 แต่ใน VS2005 ต้องเหมือนกัน):
โครงการ→คุณสมบัติ→สร้าง→ขั้นสูง→ข้อมูลการดีบัก
None
เพียงแค่เปลี่ยนไป
FileNotFoundException
) แต่คุณจะไม่สามารถเห็นร่องรอยสแต็ก ซึ่งทำให้ยากมากที่จะปักหมุดลงบนบรรทัดของโค้ดที่ทำให้เกิดข้อยกเว้น
หากไม่มีไฟล์. pdb จะเป็นไปไม่ได้ที่จะก้าวไปตามรหัสการผลิต คุณต้องพึ่งพาเครื่องมืออื่น ๆ ซึ่งอาจเสียค่าใช้จ่ายและใช้เวลานาน ฉันเข้าใจว่าคุณสามารถใช้การติดตามหรือ windbg ได้เช่นกัน แต่ขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ ในบางสถานการณ์คุณเพียงต้องการที่จะก้าวผ่านรหัสระยะไกล (ไม่มีข้อผิดพลาดหรือข้อยกเว้น) โดยใช้ข้อมูลการผลิตเพื่อสังเกตพฤติกรรมที่เฉพาะเจาะจงและนี่คือที่ไฟล์. pdb มีประโยชน์ หากไม่มีพวกเขาให้เรียกใช้ดีบักเกอร์ในรหัสนั้น
ทำไมคุณถึงแน่ใจว่าคุณจะไม่แก้ไขข้อบกพร่องในการสร้าง? บางครั้ง (หวังว่าจะเกิดขึ้น แต่ไม่ค่อยเกิดขึ้น) คุณอาจได้รับรายงานข้อบกพร่องจากลูกค้าที่ไม่สามารถทำซ้ำได้ในเวอร์ชันการดีบักด้วยเหตุผลบางประการ (การกำหนดเวลาที่แตกต่างกันพฤติกรรมที่แตกต่างกันเล็กน้อยหรืออะไรก็ตาม) หากปัญหานั้นดูเหมือนจะทำซ้ำได้ในบิลด์รีลีสคุณก็ยินดีที่จะมี pdb ที่ตรงกัน
นอกจากนี้คุณยังสามารถใช้ประโยชน์จากการถ่ายโอนข้อมูลผิดพลาดเพื่อดีบักซอฟต์แวร์ของคุณ ลูกค้าส่งให้คุณแล้วคุณสามารถใช้เพื่อระบุรุ่นที่แน่นอนของแหล่งที่มาของคุณ - และ Visual Studio จะดึงสัญลักษณ์การดีบักชุดที่ถูกต้อง (และแหล่งที่มาหากคุณตั้งค่าอย่างถูกต้อง) โดยใช้การถ่ายโอนข้อมูลความผิดพลาด ไมโครซอฟท์ดูเอกสารเกี่ยวกับร้านค้าสัญลักษณ์
ไฟล์. PDB เป็นชื่อย่อของ "ฐานข้อมูลโปรแกรม" มันมีข้อมูลเกี่ยวกับจุดแก้จุดบกพร่องสำหรับการดีบักและทรัพยากรที่ใช้หรือการอ้างอิง มันสร้างขึ้นเมื่อเราสร้างเป็นโหมดแก้ไขข้อบกพร่อง อนุญาตให้แอปพลิเคชันตรวจแก้จุดบกพร่องในขณะทำงาน
ขนาดเพิ่มขึ้นของไฟล์. PDB ในโหมดดีบัก มันถูกใช้เมื่อเราทดสอบใบสมัครของเรา
บทความดีดีของไฟล์ pdb
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
ในโซลูชันที่มีหลายโครงการคุณมักต้องการมีหนึ่งการกำหนดค่าที่สร้างไม่มีไฟล์ PDB หรือ XML เลย แทนที่จะเปลี่ยนDebug Info
คุณสมบัติของทุกโครงการเป็นnone
ฉันคิดว่ามันจะเป็นการง่ายกว่าที่จะเพิ่มเหตุการณ์ post-build ที่ทำงานในการกำหนดค่าเฉพาะ
แต่น่าเสียดายที่ Visual Studio ไม่อนุญาตให้คุณระบุกิจกรรมหลังการสร้างที่แตกต่างกันสำหรับการกำหนดค่าที่แตกต่างกัน ดังนั้นฉันตัดสินใจที่จะทำด้วยตนเองโดยแก้ไขcsproj
ไฟล์ของโครงการเริ่มต้นและเพิ่มต่อไปนี้ (แทนPostBuildEvent
แท็กที่มีอยู่):
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
น่าเสียดายที่สิ่งนี้จะทำให้กล่องข้อความเหตุการณ์การสร้างโพสต์ว่างเปล่าและการวางสิ่งใดไว้ในนั้นอาจทำให้เกิดผลลัพธ์ที่ไม่สามารถคาดการณ์ได้
*.xml
ไฟล์ทั้งหมดระวังให้ดี
สัญลักษณ์การดีบัก ( .pdb) และ XML doc ( .xml) คิดเป็นเปอร์เซ็นต์ขนาดใหญ่ของขนาดทั้งหมดและไม่ควรเป็นส่วนหนึ่งของแพ็คเกจการปรับใช้ทั่วไป แต่ควรเข้าใช้งานได้ในกรณีที่จำเป็น
แนวทางหนึ่งที่เป็นไปได้: ในตอนท้ายของกระบวนการสร้าง TFS ให้ย้ายไปยังสิ่งประดิษฐ์แยกต่างหาก
จริงๆแล้วหากไม่มีไฟล์ PDB และข้อมูลเชิงสัญลักษณ์พวกเขามีมันเป็นไปไม่ได้ที่จะสร้างรายงานข้อขัดข้องที่ประสบความสำเร็จ (ไฟล์ดัมพ์หน่วยความจำ) และ Microsoft จะไม่มีภาพรวมที่ทำให้เกิดปัญหา
ดังนั้นการมี PDB ช่วยปรับปรุงการรายงานข้อขัดข้อง