2010-09-07 24 views
13

Tôi đã có một minidump Windows (mã C) và một tệp exe tương ứng. Thật không may, tôi không có tệp .pdb phù hợp chính xác, nhưng tôi có tệp .pdbs chứa cùng một mã chính xác chỉ được xây dựng tại một thời điểm khác. Trong Windbg, tôi có thể sử dụng:Có thể tải các biểu tượng không khớp trong Visual Studio không?

.symopt+0x40 

Để yêu cầu tải bất kỳ thứ gì, ngay cả tệp biểu tượng không khớp. Điều này làm việc tuyệt vời trong trường hợp cụ thể này, và tôi có thể nhận được một ngăn xếp cuộc gọi thích hợp. Tôi chỉ tò mò về việc liệu Visual Studio có bất kỳ tính năng nào như vậy hay không. Chúng tôi sử dụng khá nhiều phiên bản khác nhau của VS ở đây, do đó, nó không quan trọng phiên bản nó có thể được in.

+0

Điều này không thực sự trả lời câu hỏi của bạn, nhưng bạn sẽ làm cho mình một ưu tiên lớn bằng cách chuẩn hóa trên một bộ công cụ dev nhất quán. –

+1

Chúng tôi có một bộ nhất quán. Nó chỉ là chúng tôi hỗ trợ các phiên bản cũ của phần mềm của chúng tôi và nó không được coi là có giá trị rủi ro để chuyển các phiên bản cũ của phần mềm cho các phiên bản mới hơn của Visual Studio. – Morinar

Trả lời

4

Không có ghi đè lên, nhưng các poster để this question tìm thấy một cách để sửa đổi các tập tin PDB để làm cho chúng phù hợp với EXE.

Nhờ một trong những ý kiến ​​về câu trả lời đầu tiên , tôi đã kiểm tra ra một liên kết đến các file PDF của cuốn sách "khống và Windows 2000 bí mật: Một lập trình viên Cookbook". Và tác giả truy cập vào chi tiết tuyệt vời về tệp pdb có định dạng . Như tôi đã nói trước đây, tôi đã có đã tải pdb vào trình biên tập hex và lật một số bit xung quanh xuất hiện rằng tôi đã thực hiện kết quả phù hợp với độ tuổi , nhưng không hoạt động . Vâng, sau khi sử dụng tiện ích từ cuốn sách bí mật W2k để "phát nổ" pdb vào các luồng được bao gồm, tôi phát hiện ra rằng chúng ẩn một tham chiếu khác với độ tuổi trong dòng 3 !!!!!!! Khi tôi lật cái đó thành , nó khớp với nhau trong windbg.

Không chắc chắn nếu bạn muốn gặp nhiều rắc rối này, nhưng có vẻ như nó có thể được thực hiện. Nếu đây là hỗ trợ sản xuất thì nó có thể đáng giá trong thời gian của bạn.

+0

Tôi đã kết thúc làm việc xung quanh vấn đề này, nhưng muốn chấp nhận câu trả lời vì tôi không thích tỷ lệ trả lời của tôi dưới 100% ;-) Điều này dường như có thông tin hữu ích nhất, vì vậy tôi chấp nhận nó. – Morinar

0

Theo this post có thể sử dụng các lệnh windbg sos cũng như trong studio trực quan. Nhưng tôi không chắc chắn nếu ".symopt" cũng rơi vào thể loại này.

18

Hãy thử this utility:

ChkMatch tiện ích có thể được sử dụng để kiểm tra xem khả năng thực hiện debug trận đấu tập tin thông tin. Nó cũng có thể được sử dụng để thực thi khớp giữa tệp thực thi và tệp thông tin gỡ lỗi, nếu chúng tương thích.

Để biết thêm thông tin về cách gỡ lỗi thông tin khớp và các vấn đề liên quan, hãy xem số article này.

hỗ trợ gỡ lỗi định dạng thông tin: DBG, PDB 2,0, PDB 7,0 ...

+1

Đây phải là câu trả lời được chấp nhận. –

+1

Điều này hoàn toàn phải là câu trả lời được chấp nhận. – SashaZh

+0

Tôi thứ hai, đây là giải pháp. –

3

pdbs đối sánh Visual Studio và Windbg bằng cách so sánh dấu thời gian trong tiêu đề Thực thi với dấu thời gian lưu trữ trong tệp pdb. Bạn có thể xem dấu thời gian bằng cách chạy dumpin/headers.

Tôi đã không sử dụng chkmatch nhưng sửa đổi hoặc exe hoặc pdb để phù hợp với nhau nên làm việc tốt.

Lưu ý rằng kỹ thuật này có thể không đủ để gỡ lỗi nhị phân của bạn.John Robbins trong cuốn sách 'Debugging Windows' (mà tôi có thể đề nghị) đề cập đến việc anh ta nhìn thấy các kết quả xây dựng khác nhau từ cây nguồn giống hệt nhau được xây dựng ở thời gian gần như giống hệt nhau.

Luôn xây dựng các ký hiệu pdb với các bản dựng của bạn (bao gồm bản dựng bản phát hành) và lưu trữ chúng cùng với các sản phẩm xây dựng và bao gồm tệp .map để có biện pháp tốt.