2009-04-16 3 views

Trả lời

25

Bài viết hay về cách sử dụng tệp bản đồ để tìm sự cố.

http://www.codeproject.com/KB/debug/mapfile.aspx

thủ làm tất cả điều này là rất nhàm chán.

Tôi không biết bất kỳ công cụ nào có thể đọc tệp bản đồ và giúp tìm vị trí tai nạn. Nếu có ai biết hãy cập nhật chúng tôi.

8

Bạn cần chúng hiếm khi, nhưng chúng có thể tiện dụng gỡ rối một số vấn đề vì chúng cung cấp thông tin về vị trí của hàm và dữ liệu.

Ví dụ:

  • thông tin chi tiết về tất cả các phân đoạn (mã, dữ liệu và khác).
  • số dòng liên kết đến mã

Bạn có thể sử dụng các file bản đồ cho các công cụ gỡ lỗi.

+0

Bạn muốn mở trình tháo gỡ quy trình và kiểm tra địa chỉ thô? – sharptooth

+0

Đó là một khả năng. Như tôi đã nói, bạn cần chúng hiếm khi, nhưng nếu bạn cần chúng, bạn vui mừng vì chúng có sẵn. –

12

Đối với các hệ thống nhúng, tệp bản đồ hữu ích hơn rất nhiều. (Mặc dù bạn sẽ không sử dụng Visual C++ cho điều đó;)

Những điều như biết bạn sắp hết chương trình/bộ nhớ dữ liệu như thế nào và vị trí nào một biến cụ thể cư trú là quan trọng.

+0

Có điều gì trên nền tảng UNIX tương tự như các tệp danh sách không? Nếu có, làm thế nào để tôi tạo ra nó? – Shree

+0

không có ý tưởng. kiểm tra tài liệu biên dịch của bạn. –

8

WinDBG sử dụng tệp .map và .pdb để giúp gỡ lỗi sự cố, khi phân tích .hdmp và .mdmp đổ đổ.

Về cơ bản, chúng ánh xạ địa chỉ bộ nhớ tới các hàm và biến trong .exe (hoặc .dll). Rất hữu ích nói chung.

EDIT: Cách hữu ích nhất để gỡ lỗi "sau khi thực tế" sự cố đang sử dụng WinDbg cho tôi (nền tảng cửa sổ). Mở nó ra và mở bãi chứa sự cố. Sau đó thiết lập đường dẫn nguồn để trỏ vào mã (nếu bạn có nó), đường dẫn biểu tượng trỏ tới .map và .pdb của bạn và đường dẫn hình ảnh tới .exe và gõ "! Analysis -v" trong dòng lệnh . Bây giờ bạn có một dấu vết ngăn xếp đầy đủ với dòng mã và tất cả mọi thứ.
Thậm chí còn tốt hơn nếu bạn có máy chủ biểu tượng MS trong đường dẫn và nếu toàn bộ trang heap được bật hoặc adplus đang chạy. Xem hai nguồn WinDbg yêu thích của tôi:
Đầu tiên dừng :: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
Force tải những biểu tượng :: http://www.osronline.com/ShowThread.cfm?link=182377
trang web hữu ích :: http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/

0

Linker bản đồ có thể rất hữu ích trong các dự án lớn khi bạn cần phải theo dõi phụ thuộc giữa các đơn vị biên dịch và thư viện. Thông thường, một trình liên kết sẽ báo cáo một biểu tượng gây ra sự cố và thường không phải là tìm kiếm đơn giản cho tên biểu tượng này sẽ không trả lại bất kỳ kết quả nào (hoặc sẽ trả về tấn dương tính giả cho các ký hiệu như read).

Nếu không có bản đồ liên kết, tùy chọn duy nhất bạn có là phân tích tất cả các tệp nguồn sẵn có (sau khi tiền xử lý chuyển qua nếu macro được sử dụng, thường là trường hợp) và hy vọng bạn tìm thấy vị trí phù hợp.

Bản đồ liên kết thường có phần gọi là "tham chiếu theo tệp/biểu tượng" cho bạn biết tệp đối tượng nào được yêu cầu bởi tệp đối tượng khác của dự án của bạn và biểu tượng nào được tham chiếu chính xác.

Tôi đã từng làm việc trên một dự án đã được chuyển sang một hệ thống không hỗ trợ ngôn ngữ. Trình liên kết đã báo cáo lỗi "tham chiếu không xác định đến _localeconv_r", điều này có thể là một nỗi đau để theo dõi bằng cách tìm kiếm thông qua các nguồn. May mắn thay, một tệp bản đồ liên kết GCC được tạo với -Map=output.map đã tiết lộ tất cả các hàm có vấn đề với một tìm kiếm duy nhất.