2013-06-15 26 views
12

Tôi đã tìm ra cách tệp .NET assembly .dll ánh xạ thành tệp .pdb bằng cách sử dụng GUID (blog). Khi tôi gỡ lỗi vào một hội đồng và nó yêu cầu mã nguồn, nếu tôi điều hướng đến một tệp, nó có thể cho tôi biết rằng mã nguồn khác với bản gốc. Làm thế nào nó biết điều này? Tôi đã mong đợi tệp .pdb chứa một tổng kiểm tra cho mỗi tệp, nhưng nó không xuất hiện. Công cụ tốt nhất mà tôi tìm thấy để kết xuất thông tin gỡ lỗi là dia2dump. Tệp C++ .pdb có mục MD5, nhưng tệp C# .pdb thì không.Làm cách nào để Visual Studio biết liệu tệp nguồn có khớp với phiên bản gốc không?

C++ đổ
dia2dump -f dia2dump.pdb>dia2dump.pdb.files.txt

C# bãi
dia2dump -f Autofac.pdb>Autofac.pdb.files.txt
dia2dump -all Autofac.pdb>Autofac.pdb.all.txt

Có cái gì tôi bỏ lỡ trong "tất cả" dump?

Nó đã phải sử dụng tổng kiểm tra. Nếu tôi thay đổi một nhân vật duy nhất trong Module.cs, tôi nhận được:
enter image description here

Tôi có thể tìm checksum cho một tập tin nguồn tham chiếu trong một PDB?

Trả lời

8

Kiểm tra MD5 được lưu trữ trong tệp .pdb cho mỗi tệp nguồn. Nếu bạn trả lời "Không" cho câu hỏi trên "? Bạn có muốn trình gỡ lỗi để sử dụng nó anyway", nó in ra checksum nó đang tìm kiếm:

enter image description here

Sử dụng một trình soạn thảo hex, bạn có thể nhìn thấy nó chắc chắn là trong .pdb. Nhiệm vụ tiếp theo của tôi là tìm ra cách để truy cập nó một cách có lập trình. Đối với tệp .pdb, tôi muốn nó trả về tất cả tên tệp nguồn và tổng kiểm tra MD5 của chúng.

enter image description here

+0

Tôi đã nhìn vào pdb tập tin rất nhiều thời gian gần đây. Bạn có thể tìm thêm chi tiết tại đây. http://blog.ctaggart.com/search/label/pdb –

+0

Bạn đã bao giờ tìm cách để lấy giá trị băm MD5 của các PDB .NET chưa? – Petrik

+2

Tôi đã làm. Tôi đã tạo một thư viện .NET có tên SourceLink có thể làm điều đó. https://github.com/ctaggart/SourceLink –

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