15

Chúng tôi có một bản gốc C++ Win32 .exe được xây dựng bằng Visual Studio 2005 hoạt động hoàn hảo trên tất cả các máy chúng tôi đã thử nghiệm trong nhà (XP 32-bit, Vista 32-bit & Windows 7 64 bit). Nhưng tất nhiên, nó bị treo nhiều lần trên máy Vista 32 bit của máy khách.Gỡ lỗi bản phát hành được xây dựng trên máy của khách hàng

Đào xung quanh trên một số trang web tôi tìm thấy mẩu tin đó cho biết nếu tôi gửi các tập tin PDB (vc80.pdb & ProjectName PDB) cùng với việc xây dựng phiên bản của file thực thi cho khách hàng, có một số cách để tạo ra minidumps khi xảy ra sự cố. Sau đó tôi có thể tải đổ rác vào Visual Studio và nhận được một dấu vết ngăn xếp và một số thông tin hữu ích khác. Tiện ích Dr. Watson của Microsoft cũng dường như tham gia vào quá trình này.

Nhưng tôi không thể tìm thấy bất kỳ hướng dẫn rõ ràng về các bước để làm theo để thực hiện điều này

  • những tập tin xuất xưởng?
  • làm thế nào để có được một bãi rác được tạo ra?
  • và cách tải mã này vào VS?

Ai đó có thể mô tả quy trình này không?

+1

Tôi không nghĩ Dr. Watson là người bảo tồn tồn tại trong Vista và sau này. –

Trả lời

10

Chúng tôi có thể nhận được các vụ tai nạn từ Bản phát hành của chúng tôi. trong lĩnh vực này và không cần gửi các tệp pdb với sản phẩm của chúng tôi.

Chúng tôi xây dựng trong các cuộc gọi để tạo tệp kết xuất sự cố trong chính xử lý ngoại lệ cấp cao nhất của chúng tôi bằng cách sử dụng MiniDumpWriteDump() tôi tin. Nhưng ngay cả khi không có điều đó, bạn có thể có người dùng tạo ra các tập tin tai nạn tại điểm của vụ tai nạn bằng cách sử dụng công việc quản lý tôi tin như đã đề cập ở đây: MSDN Instructions for creating dump file.

Khi bạn có tệp kết xuất, khách hàng nén và gửi thư cho bạn và bạn thả nó vào Visual Studio. Trong VS, sau đó bạn chọn gỡ lỗi hỗn hợp hoặc gỡ lỗi Native và nó sử dụng bản sao cục bộ của của pdb để cho bạn thấy các cuộc gọi stack vv

Example from a dump I just created from a MS process

2

Tôi đã làm điều này một thời gian trước và tôi nghĩ rằng tôi đã theo dõi this guide. Nếu nó không hoạt động, hãy kiểm tra tiện ích Windbg, tôi nhớ bạn không cần phải cài đặt nó, chỉ cần sao chép và chạy, ngay cả từ một thanh USB

+0

Tôi đã thấy rằng bài viết CodeProject, nhưng nó có vẻ khủng khiếp ngày (xuất bản năm 2002, và có hướng dẫn cho VS. Net 2003). Bạn có biết liệu nó có thể áp dụng cho VS2005 không? (Tôi biết rằng trình biên dịch cũng cổ, nhưng tôi phải làm việc với nó). WinDbg trông có vẻ hứa hẹn ... +1 – Praetorian

+0

Khi tôi làm điều đó, tôi đã sử dụng VS2008. Nó chắc chắn có thể, nhưng bạn có thể cần phải làm một số tinh chỉnh –

5

Tôi cảm thấy nỗi đau của bạn. Phải làm điều đó một lúc trước.

Dù sao, bạn đã thử google Breakpad chưa?

Breakpad là một thư viện và bộ công cụ cho phép bạn phân phối ứng dụng cho người dùng với trình biên dịch cung cấp thông tin gỡ lỗi loại bỏ, bị treo kỷ lục trong nhỏ gọn "minidump" tác phẩm, gửi lại cho máy chủ của bạn, và tạo ra dấu vết ngăn xếp C và C++ từ các minidumps này. Bàn di chuột cũng có thể viết minidumps theo yêu cầu cho các chương trình có số không bị lỗi.

Breakpad hiện đang được sử dụng bởi Google Chrome, Firefox, Google Picasa, Camino, Google Earth, và các dự án khác

Bạn có thể tìm thấy nó ở đây: http://code.google.com/p/google-breakpad/

Nó làm những điều tương tự như các câu trả lời khác được đề cập, nhưng tự động trả lời, hãy giải thích cho bạn rất nhiều thời gian và nỗ lực

+0

BReakpad trông kinda mát mẻ. Cảm ơn bạn đã đề cập đến nó. – jschroedl

6

Quá trình bạn sẽ có dạng như sau:

  1. Biên dịch tệp thi hành và tạo tệp PDB. Đảm bảo bạn không thực hiện bất kỳ thay đổi nào đối với mã được sử dụng cho tệp thực thi hoặc giữ bản sao lưu.
  2. Gửi tệp thi hành cho khách hàng. Không cần gửi tệp PDB. Lý do duy nhất để làm tàu ​​đó là nếu bạn muốn gỡ lỗi trên máy của khách hàng, hoặc sử dụng các công cụ như Process Explorer để có được một dấu vết stack với tên hàm tại một số điểm. Dường như không được áp dụng trong trường hợp của bạn.
  3. Nếu đó là máy XP/2003, hãy sử dụng drwtsn32 để định cấu hình tạo vùng đổ rác. Nếu là Vista/7/2008, drwtsn32 sẽ ngừng hoạt động và bạn nên định cấu hình WER instead. Một tùy chọn khác đang sử dụng ADPlus để khởi chạy ứng dụng của bạn.
  4. Sau khi xảy ra sự cố, hãy đưa kết xuất lại cho bạn và tải nó trong Visual Studio. Bạn phải có mã chính xác, thực thi và PDB trong tay để gỡ lỗi trơn tru.

Lưu ý:

  • WinDbg là hữu ích để gỡ lỗi trên môi trường sản xuất. Nó là một trình gỡ lỗi rất mạnh và nó là di động, nhưng nếu bạn quen với VS, bạn sẽ thoải mái hơn khi sử dụng nó.
  • Nếu bạn tạo một minidump, bạn sẽ nhận được dấu vết ngăn xếp và một số giá trị biến. Nếu bạn tạo một bãi chứa đầy đủ, bạn sẽ nhận được toàn bộ đống, bao gồm tất cả các biến - và tệp kết xuất lớn hơn nhiều ... Nếu việc chuyển không phải là vấn đề, hãy sử dụng các bãi chứa đầy đủ.
  • Nếu bạn register at Microsoft, bạn có thể có quyền truy cập vào các bãi được tạo khi chương trình của bạn gặp sự cố trên các trang web của khách hàng. Nó gây phiền nhiễu "Gửi thông tin cho Microsoft?" cửa sổ bạn nhận được khi một quá trình tai nạn đó sẽ gửi các bãi chứa để MS, và bạn sẽ có quyền truy cập vào nó ...
3

tôi đã viết 2 bài viết về DDJ về sau chết gỡ lỗi, có thể giúp bạn:

sau cái chết Debugging http://drdobbs.com/tools/185300443

và post-mortem Debugging Revisited http://drdobbs.com/architecture-and-design/227900186

bài viết thứ hai chứa mã nguồn để điền vào ngăn xếp bãi từ một máy client w thông tin biểu tượng thứ i được lấy từ tệp bản đồ hoặc tệp pdb.

1

Nếu khách hàng của bạn đang sử dụng Vista SP1 trở lên, bạn có thể định cấu hình hệ thống để tạo tệp kết xuất cục bộ mỗi khi ứng dụng gặp sự cố. Bạn có thể tìm thấy tài liệu đầy đủ trên MSDN site.

Bạn có thể giữ tất cả PDB của mình ở chế độ riêng tư. Những thứ đó chỉ cần thiết khi bạn thực sự phân tích tệp kết xuất.Nếu bạn muốn theo dõi các PDB tương ứng với các phiên bản của sản phẩm bạn gửi, bạn nên cân nhắc sử dụng một máy chủ biểu tượng.

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