2010-09-26 40 views
13

Tôi bị nhầm lẫn như sự khác biệt giữa các trình biên dịch và mối liên kết PDB file tương ứng (ví dụ: trong Visual Studio, Project Properties > C/C++ > Output Files > Program Database File NamevsProject Properties > Linker > Debugging) là gì. Tôi đã cố gắng tìm câu trả lời trực tuyến và cho đến nay tôi biết (có thể sai) rằng tệp PDB bởi trình biên dịch được tạo cho obj tệp trong khi tệp PDB bởi trình liên kết được tạo cho nhị phân (exe hoặc dll) và là một được sử dụng để gỡ lỗi.tập tin biên dịch PDB và Linker PDB nộp

Nếu điều đó không đúng, vui lòng giải thích sự khác biệt. Dù bằng cách nào, phải làm gì khi tôi tạo một DLL nơi tôi có tùy chọn để chọn tệp đầu ra PDB cho trình biên dịch cũng như trình liên kết và phải làm gì khi tôi tạo tệp LIB mà chỉ trình biên dịch tạo tệp PDB vì không có liên kết nào được thực hiện.

Bối cảnh: Các thư viện/dlls được sử dụng bởi một số dự án, sau đó cần PDB file để gỡ lỗi. Trong trường hợp tệp lib, không có sự mơ hồ vì chỉ có một tệp PDB được tạo. Tuy nhiên, trong trường hợp của DLL, tôi có cần cả hai tệp PDB để gỡ lỗi đúng cách hoặc chỉ một tệp được tạo bởi trình liên kết không?

Trả lời

12

Tôi thành thật không biết chính xác tệp .pdb được tạo bởi bước biên dịch được sử dụng cho - Tôi giả định rằng đó là một số thông tin trung gian được kéo vào tệp .pdb cuối cùng bởi trình liên kết.

Tuy nhiên, điểm mấu chốt là dành cho mục đích gỡ lỗi tất cả những gì bạn cần là tệp .pdb được tạo bởi trình liên kết.


Cập nhật: Một đào ít ghi bàn này từ http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx:

hai loại tập tin PDB là gì?

==============================

Có hai loại tệp PDB. Một được tạo bởi trình biên dịch có tên là VCx0.PDB (ví dụ: vc80.pdb) và một số khác là .PDB.

Tệp VCx0.PDB được tạo bởi trình biên dịch và nó có liên quan đến tệp .OBJ . Nó chỉ chứa thông tin loại .

Tệp .PDB là được tạo bởi trình liên kết và nó là liên quan đến mục tiêu thực thi hoặc DLL. Tệp này chứa thông tin gỡ lỗi hoàn chỉnh . Khi chúng tôi đang gỡ lỗi , chúng tôi cần tệp '.pdb' này để căn chỉnh các biểu tượng. Dấu thời gian của tệp đích và PDB phải khớp nhau.

+0

(văn này trước khi cập nhật của bạn, nhưng nó áp dụng cho bản cập nhật cũng) Vì vậy, khi tôi tạo file 'lib' (có nghĩa là, một thư viện tĩnh), và chỉ trình biên dịch có thể tạo ra 'pdb 'tập tin kể từ khi mối liên kết không còn cần thiết, điều này có nghĩa rằng bây giờ các tập tin' pdb' được tạo ra bởi trình biên dịch là một trong những cần thiết để gỡ lỗi? – Samaursa

+1

. Các tệp .lib không liên quan đến việc thực thi hoặc gỡ lỗi chương trình. Chúng chỉ là đầu vào cho trình liên kết. Các 'công cụ' thích hợp trong một tập tin lib hoặc là một phần của nhị phân (trong trường hợp của một thư viện tĩnh) hoặc được sử dụng để tạo các liên kết động tới các tệp DLL (trong trường hợp thư viện nhập). Trong cả hai trường hợp đó, tệp .pdb bạn cần để gỡ lỗi là tệp được tạo bởi trình liên kết khi tệp .exe hoặc .dll thực tế được tạo. –

+1

Tuyệt vời, cảm ơn vì đã xây dựng Michael, tôi sẽ tiếp tục và kiểm tra điều này như là câu trả lời đúng. Mặc dù kể từ khi chúng tôi _are_ về chủ đề này, nếu bạn có thể trả lời câu hỏi này. Havok SDK được liên kết tĩnh và tất cả các thư viện của nó đều có các tệp 'PDB' tương ứng. Bit thú vị là, nếu bạn liên kết với các thư viện mà không có các tệp 'PDB' đi kèm chúng trong cùng một thư mục, thì Visual Studio cung cấp một tấn cảnh báo rằng' thông tin Debug bị thiếu, biên dịch như thể không có thông tin gỡ lỗi được cung cấp' (Tôi paraphrasing) – Samaursa

Các vấn đề liên quan