2010-10-10 42 views
164

Tệp PDB là gì và làm cách nào để loại trừ nó khỏi thư mục phát hành khi tôi xây dựng lại giải pháp của mình?Tệp PDB là gì?

+12

pdb là tệp cơ sở dữ liệu chương trình và được tạo trên biên dịch. Tệp này giữ gỡ lỗi và thông tin trạng thái dự án cho phép liên kết gia tăng cấu hình gỡ lỗi của chương trình của bạn. – pavanred

+0

@pavanred bạn chắc chắn trình biên dịch C# cũng có liên kết gia tăng không? Tôi chỉ nghe về nó trong thế giới C++. Trong một dự án C++ bạn bật/tắt liên kết gia tăng từ các thuộc tính của dự án. Có một tùy chọn trong C# dự án cũng? – RBT

Trả lời

165

Tệp PDB chứa thông tin để trình gỡ lỗi hoạt động. Có ít thông tin hơn trong bản dựng Bản phát hành hơn là trong bản dựng Gỡ lỗi. Nhưng nếu bạn muốn nó không được tạo ra ở tất cả, hãy vào thuộc tính Build của dự án của bạn, chọn cấu hình Release, bấm vào "Advanced ..." và dưới "Debug Info" chọn "None".

+1

@Jon Có giúp cung cấp thêm thông tin cho người dùng nếu ứng dụng gặp sự cố không? (tức là, nó có giúp với cửa sổ JIT, chứ không phải là "Chương trình này cần kết thúc, gửi Báo cáo Lỗi Windows") –

+11

Ghi nhớ rằng bạn nên giữ chúng trong các bản phát hành gỡ lỗi, vì nó cho phép các ngoại lệ được truy tìm vào một dòng cụ thể trong mã của bạn. Nếu không có các ký hiệu trong tệp pdb, bạn sẽ thấy khó xác định các vấn đề cụ thể để giải quyết chúng. Bạn không nhất thiết phải loại trừ chúng khỏi bản phát hành bản phát hành, vì đôi khi thông tin bổ sung trong báo cáo lớn có thể rất hữu ích. – Darbio

+4

@Jared: Có, nó bao gồm một dấu vết ngăn xếp của ngoại lệ, mà sẽ xác định một chức năng cụ thể và dòng mã. – Darbio

10

A PDB file chứa thông tin được trình gỡ lỗi sử dụng. Không bắt buộc phải chạy ứng dụng của bạn và nó không cần phải được bao gồm trong phiên bản phát hành của bạn.

Bạn có thể tắt tệp pdb được tạo trong Visual Studio. Nếu bạn đang xây dựng từ dòng lệnh hoặc tập lệnh thì hãy bỏ qua khóa chuyển đổi /Debug.

+0

Chế độ phát hành vẫn xây dựng PDB theo mặc định, tôi tin tưởng. Bạn có thể thay đổi các thuộc tính của dự án để vô hiệu hóa nó. –

+0

Yup; nó vẫn đi kèm với bản phát hành với một dự án mặc định. –

+0

Tôi chỉ cần kiểm tra và tôi cũng nhận được một theo mặc định nếu sử dụng Visual Studio. –

81

Tôi đã tự hỏi mình câu hỏi "Tôi có cần tệp PDB được triển khai cho máy của khách hàng không?" và sau khi đọc bài đăng này, đã quyết định loại trừ tệp.

Mọi thứ hoạt động tốt, cho đến hôm nay, khi tôi cố gắng tìm ra lý do tại sao hộp thư chứa Exception.StackTrace thiếu thông tin tệp và số dòng - cần thiết để khắc phục sự cố ngoại lệ. Tôi đọc lại bài này và tìm thấy thông tin quan trọng: mặc dù PDB không cần thiết cho ứng dụng để chạy, nó là cần thiết cho các tập tin và số dòng có mặt trong chuỗi StackTrace. Tôi đã bao gồm tệp PDB trong thư mục thực thi và bây giờ tất cả đều ổn.

45

PDB là viết tắt cho P rogram D ata B ase. Như tên cho thấy, nó là một kho lưu trữ (lưu trữ liên tục như cơ sở dữ liệu) để duy trì thông tin cần thiết để chạy chương trình của bạn trong chế độ gỡ lỗi. Nó chứa nhiều thông tin quan trọng cần thiết trong khi bạn gỡ lỗi mã của bạn (trong Visual Studio), ví dụ: tại những điểm bạn đã chèn điểm ngắt nơi bạn mong đợi trình gỡ lỗi để phá vỡ trong Visual Studio.

Đây là lý do tại sao nhiều lần Visual Studio không đạt được điểm ngắt nếu bạn xóa tệp * .pdb khỏi các thư mục gỡ lỗi của mình. Trình gỡ lỗi Visual Studio cũng có thể cho bạn biết số dòng chính xác của tệp mã mà tại đó một ngoại lệ xảy ra trong một dấu vết ngăn xếp với sự trợ giúp của các tệp * .pdb. Các tệp pdb hiệu quả thực sự là một lợi ích cho các nhà phát triển trong khi gỡ lỗi một chương trình.

Nói chung, không nên loại trừ việc tạo tệp * .pdb. Từ bản phát hành sản phẩm, tại điểm tối đa những gì bạn nên làm là tạo các tệp pdb nhưng không gửi chúng đến trang web của khách hàng trong trình cài đặt sản phẩm. Bảo toàn tất cả các tệp pdb được tạo trên máy chủ biểu tượng từ nơi nó có thể được sử dụng/tham chiếu trong tương lai nếu được yêu cầu. Đặc biệt đối với các trường hợp khi bạn gỡ lỗi các sự cố như sự cố quy trình. Khi bạn bắt đầu phân tích các tệp kết xuất sự cố và nếu tệp * .pdb gốc của bạn được tạo trong quá trình xây dựng không được bảo toàn thì Visual Studio sẽ không thể tạo ra dòng mã chính xác gây ra sự cố.

Nếu bạn vẫn thực sự muốn vô hiệu hóa việc tạo tệp * .pdb cho bất kỳ bản phát hành nào sau đó chuyển đến thuộc tính của dự án -> Tab xây dựng -> Nhấp vào nút Nâng cao -> Chọn không cho trường "Thông tin gỡ lỗi" -> nhấn OK như được hiển thị trong ảnh chụp bên dưới.

None Debug Info setting for a C# Project

Note: Thiết lập này sẽ phải được thực hiện riêng cho "Debug" và "phát hành" xây dựng cấu hình.