ไฟล์ PDB คืออะไร


252

ไฟล์ PDB คืออะไรและฉันจะแยกไฟล์ออกจากโฟลเดอร์ release ได้อย่างไรเมื่อฉันสร้างโซลูชันขึ้นมาใหม่?


17
pdb เป็นไฟล์ฐานข้อมูลโปรแกรมและสร้างขึ้นเมื่อคอมไพล์ ไฟล์นี้เก็บข้อมูลการดีบักและสถานะโครงการที่อนุญาตให้เชื่อมโยงส่วนเพิ่มของการกำหนดค่าการดีบักของโปรแกรม
pavanred

@pavanred คุณแน่ใจหรือไม่ว่าคอมไพเลอร์ C # จะเชื่อมโยงส่วนเพิ่มด้วยหรือไม่ ฉันเคยได้ยินเกี่ยวกับเรื่องนี้ใน C ++ world เท่านั้น ในโครงการ C ++ คุณเปิดใช้งาน / ปิดใช้งานการเชื่อมโยงส่วนเพิ่มจากคุณสมบัติโครงการ มีตัวเลือกในโครงการ C # ด้วยหรือไม่
RBT

คำตอบ:


236

ไฟล์ PDB มีข้อมูลเพื่อให้โปรแกรมดีบั๊กทำงานได้ มีข้อมูลน้อยลงในบิลด์การวางจำหน่ายมากกว่าในบิลด์ Debug แต่ถ้าคุณไม่ต้องการให้สร้างเลยไปที่คุณสมบัติ Build ของโครงการของคุณเลือกการกำหนดค่า Release คลิกที่ "Advanced ... " และภายใต้ "Debug Info" เลือก "None"


2
@ จอนมันช่วยให้ข้อมูลเพิ่มเติมแก่ผู้ใช้หรือไม่หากแอปพลิเคชันขัดข้องในการใช้งาน? (กล่าวคือช่วยในหน้าต่าง JIT ไม่ใช่ "โปรแกรมนี้ต้องจบส่งรายงานข้อผิดพลาดของ Windows")
Jared Harley

19
โปรดจำไว้ว่าคุณควรเก็บสิ่งเหล่านี้ไว้ในการแก้ไขข้อบกพร่องของคุณเนื่องจากจะอนุญาตให้มีการติดตามข้อยกเว้นไปยังบรรทัดที่ระบุในรหัสของคุณ หากไม่มีสัญลักษณ์ในไฟล์ pdb คุณจะพบว่ายากที่จะระบุปัญหาที่เฉพาะเจาะจงเพื่อแก้ไขปัญหาเหล่านั้น คุณไม่จำเป็นต้องแยกออกจาก build build ด้วยเช่นกันเนื่องจากบางครั้งข้อมูลเพิ่มเติมในรายงานขนาดใหญ่อาจมีประโยชน์มาก
Darbio

4
@ Jared: ใช่มันรวมถึงการติดตามสแต็กของข้อยกเว้นซึ่งจะระบุถึงฟังก์ชั่นที่เฉพาะเจาะจงและบรรทัดของรหัส
Darbio

1
@Jared: คุณหมายถึงอะไรโดย "หน้าต่าง JIT" ไม่น่าเป็นไปได้ที่จะให้ข้อมูลเพิ่มเติมแก่ผู้ใช้ แต่อาจช่วยให้คุณสามารถแนบดีบักเกอร์กับบิลด์รีลีสได้หากคุณต้องการ โดยทั่วไปแล้วคุณจะไม่รวมแอปพลิเคชันสำหรับผู้ใช้ปลายทาง แน่นอนเพียงเพราะมันถูกคัดลอกไปยังโฟลเดอร์ Release ไม่ได้หมายความว่าคุณต้องจัดส่งในตัวติดตั้ง ...
Jon Skeet

3
@Ata: PDB ไม่ใช่ PDF กรุณาแยกทั้งสองในใจของคุณ - พวกเขากำลังสมบูรณ์รูปแบบไฟล์ที่แตกต่างกันเพื่อวัตถุประสงค์ที่แตกต่างกัน การรวม PDB จะไม่แนะนำปัญหาโดยเฉพาะ มันอาจทำให้งานของแฮ็กเกอร์ง่ายขึ้นเล็กน้อยแต่นั่นเป็นข้อกังวลสำหรับคุณหรือไม่? โดยทั่วไปแล้ว. NET สามารถ decompiled ค่อนข้างง่ายในกรณีส่วนใหญ่ - ถ้าคุณกังวลเกี่ยวกับเรื่องนั้นเพียงแค่ไม่ส่ง PDB ไม่ใช่ทางออกที่ดี
Jon Skeet

130

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

ทุกอย่างทำงานได้ดีจนถึงทุกวันนี้เมื่อฉันพยายามหาสาเหตุว่าทำไมกล่องข้อความที่มีการException.StackTraceขาดหายไปคือข้อมูลไฟล์และหมายเลขบรรทัด - จำเป็นสำหรับการแก้ไขปัญหาข้อยกเว้น ฉันอ่านโพสต์นี้อีกครั้งและพบว่านักเก็ตสำคัญของข้อมูล: ถึงแม้ว่า PDB จะไม่จำเป็นสำหรับแอปที่จะเรียกใช้ แต่ก็จำเป็นสำหรับไฟล์และหมายเลขบรรทัดที่จะปรากฏในStackTraceสตริง ฉันรวมไฟล์ PDB ไว้ในโฟลเดอร์ที่สามารถใช้งานได้และตอนนี้ทั้งหมดก็ใช้ได้


2
นี่เป็นส่วนที่สำคัญมากที่ต้องจำไว้ซึ่งที่accepted answerนี่ไม่ได้กล่าวถึง
Monku

85

PDBเป็นตัวย่อของP rogram D ata B ase ตามชื่อที่แนะนำมันเป็นที่เก็บ (ที่เก็บข้อมูลถาวรเช่นฐานข้อมูล) เพื่อรักษาข้อมูลที่จำเป็นในการเรียกใช้โปรแกรมของคุณในโหมดแก้ไขข้อบกพร่อง มันมีข้อมูลที่เกี่ยวข้องที่สำคัญมากมายที่จำเป็นในขณะที่คุณทำการดีบั๊กโค้ดของคุณ (ใน Visual Studio) เช่น ณ จุดใดที่คุณได้แทรกจุดพักที่คุณต้องการให้ดีบักเกอร์แตกใน Visual Studio

นี่คือเหตุผลที่ Visual Studio ล้มเหลวในการเข้าถึงจุดพักหลายครั้งหากคุณลบ*.pdbไฟล์ออกจากโฟลเดอร์ดีบั๊ก ดีบักเกอร์ Visual Studio ยังสามารถบอกหมายเลขบรรทัดที่แม่นยำของไฟล์โค้ดที่เกิดข้อยกเว้นในการติดตามสแต็กด้วยความช่วยเหลือของ*.pdbไฟล์ ดังนั้นไฟล์ pdb ที่มีประสิทธิภาพจึงเป็นประโยชน์ต่อนักพัฒนาในขณะที่ดีบักโปรแกรม

โดยทั่วไปจะไม่แนะนำให้ยกเว้นการสร้าง*.pdbไฟล์ จากจุดเริ่มต้นของการผลิตสิ่งที่คุณควรทำคือการสร้างไฟล์ pdb แต่ไม่ส่งไปยังเว็บไซต์ลูกค้าในตัวติดตั้งผลิตภัณฑ์ เก็บรักษาไฟล์ PDB ที่สร้างขึ้นทั้งหมดไปยังเซิร์ฟเวอร์สัญลักษณ์ซึ่งสามารถใช้ / อ้างอิงได้ในอนาคตหากจำเป็น พิเศษสำหรับกรณีที่คุณแก้ปัญหาเช่นกระบวนการขัดข้อง เมื่อคุณเริ่มวิเคราะห์ไฟล์ dump crash และหาก*.pdbไฟล์ต้นฉบับของคุณที่สร้างขึ้นในระหว่างกระบวนการ build นั้นไม่ได้รับการสงวนไว้ Visual Studio จะไม่สามารถสร้างบรรทัดรหัสที่แน่นอนซึ่งเป็นสาเหตุของความผิดพลาดได้

หากคุณยังต้องการปิดการใช้งานการสร้าง*.pdbไฟล์ทั้งหมดสำหรับรุ่นใด ๆ ให้ไปที่คุณสมบัติของโครงการ -> แท็บสร้าง -> คลิกที่Advancedปุ่ม -> เลือกnoneจากช่องแบบเลื่อนลง "ข้อมูลการแก้ปัญหา" -> กดOKตามที่แสดงในภาพรวมด้านล่าง .

ไม่มีการตั้งค่าข้อมูลการดีบักสำหรับโครงการ C #

หมายเหตุ : การตั้งค่านี้จะต้องทำแยกต่างหากสำหรับการกำหนดค่าการสร้าง "Debug" และ "Release"


13

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

คุณสามารถปิดการใช้งานการสร้างไฟล์ pdb ใน Visual Studio หากคุณกำลังสร้างจากบรรทัดคำสั่งหรือสคริปต์ให้ละเว้น/Debugสวิตช์


2
โหมดการวางจำหน่ายยังคงสร้าง PDB ตามค่าเริ่มต้นฉันเชื่อว่า คุณสามารถเปลี่ยนคุณสมบัติโครงการเพื่อปิดการใช้งานได้
Jon Skeet

ได้; มันยังมาพร้อมกับการเปิดตัวกับโครงการเริ่มต้น
Andrew Barber

ฉันเพิ่งตรวจสอบและฉันยังได้รับหนึ่งถ้าใช้ Visual Studio
Mark Byers

4

ไฟล์ฐานข้อมูล Debug โปรแกรม (pdb) เป็นรูปแบบไฟล์โดย Microsoft สำหรับการจัดเก็บข้อมูลการดีบัก

เมื่อคุณสร้างโครงการโดยใช้ Visual Studio หรือพร้อมท์คำสั่งคอมไพเลอร์จะสร้างไฟล์สัญลักษณ์เหล่านี้

ตรวจสอบMicrosoft เอกสาร

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