2008-09-09 34 views
7

Tôi phải sử dụng thành phần của bên thứ ba không có mã nguồn. Tôi có DLL phát hành và phát hành tập tin PDB. Hãy gọi nó là 'CorporateComponent.dll'. Mã của riêng tôi tạo ra các đối tượng từ DLL này và gọi các phương thức trên các đối tượng này.PDB nhận được gì trong khi gỡ lỗi và làm cách nào để biết PDB hoạt động?

CorpObject o = new CorpObject(); 
Int32 result = o.DoSomethingLousy(); 

Trong khi gỡ lỗi, phương pháp 'DoSomethingLousy' ném ngoại lệ. Tập tin PDB làm gì cho tôi? Nếu nó làm điều gì đó tốt đẹp, làm thế nào tôi có thể chắc chắn rằng tôi đang sử dụng nó?

Trả lời

6

Để xác nhận xem bạn có đang sử dụng PDB, CorporateComponent.pdb, trong khi gỡ lỗi trong Visual Studio IDE xem lại cửa sổ đầu ra và định vị dòng chỉ ra rằng tệp CorporateComponent.dll được tải và theo sau là chuỗi Symbols loaded.

Để minh họa từ một dự án của tôi:

The thread 0x6a0 has exited with code 0 (0x0). 
The thread 0x1f78 has exited with code 0 (0x0). 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug \AvayaConfigurationService.exe', Symbols loaded. 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded. 

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

này chỉ ra rằng PDB đã được tìm thấy và được tải bởi trình gỡ lỗi IDE.

Khi được chỉ định bởi người khác Khi kiểm tra khung ngăn xếp trong ứng dụng của bạn, bạn sẽ có thể thấy các biểu tượng từ CorporateComponent.pdb. Nếu bạn không thì có lẽ bên thứ ba không bao gồm thông tin biểu tượng trong bản phát hành PDB phát hành.

4

PDB là tệp cơ sở dữ liệu ánh xạ hướng dẫn đến số dòng của chúng trong mã ban đầu để khi bạn nhận được dấu vết ngăn xếp, bạn sẽ nhận được số dòng cho mã. Nếu đó là một DLL không được quản lý thì tệp PDB cũng sẽ cung cấp cho bạn tên của các hàm trong theo dõi ngăn xếp, trong khi thông tin đó thường chỉ có sẵn cho các DLL được quản lý không có PDB.

0

Chính tôi nhận được từ pdb là số dòng và tên phương thức thực cho các dấu vết ngăn xếp.

5

pdb chứa thông tin mà trình gỡ lỗi cần để đọc chính xác ngăn xếp. Dấu vết ngăn xếp của bạn sẽ chứa số dòng và tên biểu tượng của các khung ngăn xếp bên trong các mô-đun mà bạn có pdb.

Tôi sẽ đưa ra hai ví dụ về cách sử dụng. Đầu tiên là câu trả lời rõ ràng. Thứ hai giải thích pdb của chỉ mục nguồn.

1 ví dụ sử dụng ...

Tùy thuộc vào gọi hội nghị và trong đó tối ưu hóa trình biên dịch được sử dụng, nó có thể không có khả năng cho các trình gỡ lỗi để tay thư giãn stack thông qua một mô-đun mà bạn không có một pdb. Điều này có thể xảy ra với một số thư viện của bên thứ ba và thậm chí đối với một số phần của hệ điều hành.

Hãy xem xét một tình huống mà bạn gặp phải vi phạm truy cập bên trong hệ điều hành windows. Theo dõi ngăn xếp không thư giãn vào ứng dụng của riêng bạn vì thành phần hệ điều hành sử dụng một quy ước gọi điện đặc biệt gây nhầm lẫn cho trình gỡ rối. Nếu bạn định cấu hình đường dẫn biểu tượng của mình để tải xuống hệ điều hành công khai của pdb, thì có khả năng là dấu vết ngăn xếp sẽ chuyển sang ứng dụng của bạn. Điều đó cho phép bạn xem chính xác các đối số mà mã của riêng bạn đã truyền vào trong cuộc gọi hệ điều hành. (Và ví dụ tương tự cho AV bên trong một thư viện của bên thứ 3 hoặc thậm chí bên trong mã của riêng bạn)

2 ví dụ sử dụng ...

PDB của có một tài sản rất hữu ích - họ có thể tích hợp với một số hệ thống kiểm soát nguồn sử dụng một tính năng mà microsoft gọi là "lập chỉ mục nguồn". Một pdb được lập chỉ mục nguồn chứa các lệnh điều khiển nguồn chỉ định cách lấy từ kiểm soát nguồn các phiên bản tệp chính xác được sử dụng để xây dựng thành phần. Các nhà gỡ rối của Microsoft hiểu cách thực hiện các lệnh để tự động tìm nạp các tệp trong một phiên gỡ lỗi. Đây là một tính năng mạnh mẽ giúp tiết kiệm trình gỡ lỗi từ việc phải tự đồng bộ hóa một cây nguồn với nhãn chính xác cho một bản dựng đã cho. Nó đặc biệt hữu ích cho các phiên gỡ lỗi từ xa và để phân tích các vụ tai nạn sau khi chết.

Cài đặt "công cụ gỡ lỗi cho cửa sổ" (windbg) chứa tài liệu có tên srcsrv.doc cung cấp ví dụ minh họa cách sử dụng srctool.exe để xác định tệp nguồn nào được lập chỉ mục nguồn trong pdb đã cho.

Để trả lời câu hỏi của bạn "làm cách nào để biết", tính năng "mô-đun" trong trình gỡ lỗi có thể cho bạn biết mô-đun nào có pdb tương ứng. Trong windbg sử dụng lệnh "lml". Trong studio trực quan, hãy chọn các mô-đun từ đâu đó trong trình đơn gỡ lỗi.(xin lỗi, tôi không có phiên bản hiện tại của studio trực quan tiện dụng)

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