Tại sao Visual Studio 2010 không thể tìm / mở tệp PDB?


83

Tôi đang cố gắng sử dụng OpenCV trong VS 2010. Tôi là một người nghiệp dư và tôi đang học những bước đầu tiên từ OpenCV wiki. Tuy nhiên, khi cố gắng gỡ lỗi dự án của tôi, tôi gặp các lỗi sau:

'C: \ Windows \ SysWOW64 \ ntdll.dll', Không thể tìm hoặc mở tệp PDB 'C: \ Windows \ SysWOW64 \ kernel32.dll', Không thể tìm hoặc mở tệp PDB 'C: \ Windows \ SysWOW64 \ kernellbase. dll ', Không thể tìm thấy hoặc mở tệp PDB

Tôi có những tệp đó trong thư mục bên phải, vậy tại sao nó không thể mở chúng? Tôi nên làm gì để khắc phục sự cố?


Ý bạn là gì với "in the right directory"? PDB có nằm trong cùng thư mục với DLL không?
harper

1
@harper: Xem xét rằng các thư viện trong câu hỏi là các tập tin hệ thống Windows, PDBs có lẽ không phải là trong thư mục giống như DLL. Các tệp DLL nằm trong thư mục C: \ Windows \ SysWOW64, nhưng các ký hiệu PDB có thể sẽ nằm trong thư mục bộ đệm ký hiệu được thiết kế của bạn. Tùy chọn bạn chỉ định trong tùy chọn gỡ lỗi Visual Studio.
Cody Grey

@Cody Grey: Bạn có thể sao chép các PDB vào thư mục (theo cách thủ công) hay bạn được yêu cầu sử dụng Máy chủ ký hiệu (Nguồn) của Microsoft?
harper

@harper: Tôi không biết liệu nó có hoạt động theo cách đó không. Tôi không chắc liệu Visual Studio có tìm thấy các ký hiệu PDB ở đó hay không (mặc dù tôi tưởng tượng rằng sẽ có ). Tuy nhiên, về việc cấp phép, tôi khá chắc rằng bạn phải sử dụng các máy chủ biểu tượng của MS. Làm cách nào khác để bạn có được các tệp PDB? Tôi cũng không chắc tại sao bạn muốn tẩy chay điều này. Visual Studio có tất cả các chức năng này được tích hợp sẵn, vậy tại sao không tận dụng nó? Nó được thiết kế để lưu các ký hiệu vào bộ nhớ cache cục bộ, vì vậy bạn không phải tải lại chúng mỗi lần. Tôi thậm chí không nhận thấy nó xảy ra nữa.
Cody Grey

@Cody Grey: Tôi không muốn tẩy chay bất cứ thứ gì. Tôi thậm chí không có những PDB này. Nhưng tôi tò mò về cách nó hoạt động.
harper

Câu trả lời:


124

Đầu tiên hãy thay đổi các thông số sau:

Công cụ -> Tùy chọn -> Gỡ lỗi -> Biểu tượng -> Máy chủ -> Có

Sau đó nhấn Ctrl+ F5và bạn sẽ thấy những điều tuyệt vời.


2
Chà! Điều đó thật tuyệt! Cảm ơn bạn vì câu trả lời này. +1 cho bạn!
Matthew Crews

Để rõ ràng, điều này sẽ chỉ tải xuống các biểu tượng một lần phải không? Nó sẽ không ngăn tôi làm việc ngoại tuyến chút nào?
Seanny123

1
Bạn có biết một liên kết trực tiếp để tải xuống nó? Tôi đang làm việc trong một mạng khép kín không có truy cập internet.
levkaster

2
Euhm ... Điều khiển F5 không đính kèm trình gỡ lỗi AFAIK. Vì vậy, câu trả lời này là thiếu điểm.
buckley

1
Tôi đã làm giống như bạn nói. nhưng bây giờ nó hiển thị một số biểu tượng được nạp trong khi đối với phần còn lại của tập tin pdb khác không thêm
Hemant Parihar

20

Tôi khá chắc rằng đó là những cảnh báo , không phải lỗi. Dự án của bạn sẽ vẫn chạy tốt.

Tuy nhiên, vì bạn nên luôn cố gắng sửa các cảnh báo trình biên dịch, hãy xem những gì chúng tôi có thể khám phá. Tôi không quen thuộc với OpenCV, và bạn không liên kết đến hướng dẫn wiki mà bạn đang theo dõi. Nhưng với tôi thì có vẻ như vấn đề là bạn đang chạy phiên bản Windows 64 bit (bằng chứng là thư mục "SysWOW64" trong đường dẫn đến tệp DLL), nhưng nội dung OpenCV mà bạn đang thử đã được xây dựng cho nền tảng 32 bit. Vì vậy, bạn có thể cần phải xây dựng lại dự án bằng CMake, như được giải thích ở đây .

Cụ thể hơn, các tệp được liệt kê là các tệp hệ thống Windows. Các tệp PDB chứa thông tin gỡ lỗi mà Visual Studio sử dụng để cho phép bạn bước vào và gỡ lỗi mã đã biên dịch. Bạn không thực sự cần các tệp PDB cho các thư viện hệ thống để có thể gỡ lỗi mã của riêng bạn. Nhưng nếu muốn, bạn cũng có thể tải xuống các biểu tượng cho các thư viện hệ thống. Đi tới trình đơn "Gỡ lỗi", nhấp vào "Tùy chọn và cài đặt", và cuộn xuống hộp danh sách ở bên phải cho đến khi bạn thấy "Bật hỗ trợ máy chủ nguồn". Đảm bảo rằng tùy chọn được chọn. Sau đó, trong dạng cây ở bên trái, hãy nhấp vào "Biểu tượng" và đảm bảo rằng tùy chọn "Máy chủ biểu tượng của Microsoft" được chọn. Bấm OK để loại bỏ hộp thoại, sau đó thử tạo lại.


7
Tôi thực sự không chắc mình phải nói gì để đáp lại điều đó. Bạn đang tìm kiếm thêm sự trợ giúp? Hay bạn chỉ để lại một bình luận? Bởi vì nếu bạn đang tìm kiếm thêm trợ giúp, bạn sẽ phải giải thích chính xác điều gì đã xảy ra khi bạn "thử điều này" và ý bạn là "không hoạt động". Tất cả chúng ta đều là lập trình viên, bạn biết đó không phải là cách gửi báo cáo lỗi hữu ích.
Cody Grey

Xin lỗi vì lý do nào đó mà toàn bộ tin nhắn của tôi không được dán. Nhưng kể từ đó tôi đã sửa nó bằng phương pháp sau. stackoverflow.com/questions/1468726/…
daveomcd

10

Visual Studio Community Edition 2015

Đã bị lỗi này cả ngày. Cuối cùng mình cũng đã khắc phục được bằng cách vào Công cụ> Nhập và xuất Cài đặt> Đặt lại tất cả tùy chọn> Đặt lại Cài đặt chung.

Sau khi nó được đặt lại, hãy đi tới Công cụ> Tùy chọn> Gỡ lỗi> Biểu tượng> - Sau đó, Chọn hộp bên cạnh Máy chủ Biểu tượng của Microsoft.

Chạy ứng dụng của bạn ở chế độ gỡ lỗi và nó sẽ mở ra các cửa sổ cho biết nó đang tải xuống Biểu tượng cho một loạt các tệp .dll khác nhau. Hãy để nó hoàn thành việc này.

Sau khi hoàn thành, nó sẽ hoạt động trở lại.


3

Tôi đã từng gặp vấn đề tương tự. Hóa ra là khi soạn một dự án mà tôi nhận được từ người khác, tôi chưa đặt đúng dự án StartUp (nhấp chuột phải vào dự án khởi động mong muốn trong trình khám phá giải pháp và chọn "đặt là Dự án StartUp"). Có lẽ điều này sẽ giúp ích, chúc mừng.


1

Đề cập đến luồng đầu tiên / một khả năng khác VS không thể mở hoặc tìm thấy tệp pdb của quy trình là khi tệp thực thi của bạn đang chạy trong nền. Tôi đang làm việc với mpiexec và gặp sự cố này. Luôn kiểm tra trình quản lý tác vụ của bạn và giết bất kỳ quy trình thực thi nào mà bạn sẽ xây dựng trong dự án của mình. Khi tôi đã làm điều đó, nó đã gỡ lỗi hoặc xây dựng tốt.

Ngoài ra, nếu bạn cố gắng tiếp tục với cảnh báo, các điểm ngắt sẽ không bị tấn công và nó sẽ không có quyền thực thi hiện tại


1

Đối với những người dùng VS2013 , những người thấy mình ở đây như tôi đã làm:

Tools -> Options -> Debugging -> Symbols

Bạn sẽ thấy rằng Cache symbols in this directory:trường trống; bạn có thể tự mình duyệt / nhập đường dẫn hoặc chỉ cần tiếp tục và nhấp vào Load all symbolsnút. Một cửa sổ cảnh báo sẽ xuất hiện với nội dung "Vì bạn chưa chọn thư mục bộ đệm biểu tượng nên mặc định sẽ được sử dụng". Bây giờ bạn sẽ thấy C:\Users\XXXX\AppData\Local\Temp\SymbolCachetrong trường đường dẫn trống trước đây. Nhấp Load all symbolslần thứ hai và bạn sẽ được thiết lập. Nhấn ok, và chỉ vì mục đích siêng năng, làm sạch và xây dựng lại giải pháp của bạn.


0

Tôi nhận thấy rằng những lỗi này đôi khi do thiếu quyền khi biên dịch một dự án - vì vậy tôi điều hành với tư cách quản trị viên để làm cho nó hoạt động bình thường.


0

Tôi đang có những cảnh báo tương tự. Tôi không chắc đó là vấn đề của 32 so với 64 bit. Chỉ cần tải các ký hiệu mới và một số vấn đề đã được giải quyết, nhưng những vấn đề liên quan đến OpenCV vẫn tồn tại. Đây là phần trích xuất đầu ra với sự cố đã được giải quyết so với chưa được giải quyết:

'OpenCV_helloworld.exe': Đã tải 'C: \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll', Không thể tìm thấy hoặc mở tệp PDB

'OpenCV_helloworld.exe': Đã tải 'C: \ WINDOWS \ system32 \ imm32.dll', Đã tải các ký hiệu (thông tin nguồn đã bị loại bỏ).

Mã đang thoát ra 0 trong trường hợp ai đó sẽ hỏi.

Chương trình '[4424] OpenCV_helloworld.exe: Native "đã thoát với mã 0 (0x0).


0

Tôi đã từng gặp vấn đề tương tự. Gỡ lỗi không hoạt động với những thứ đi kèm với tệp thực thi OpenCV. bạn phải xây dựng hệ nhị phân của riêng mình.
Sau đó, bật Máy chủ Microsoft Symbol trong Gỡ lỗi-> tùy chọn và cài đặt-> gỡ lỗi-> biểu tượng


0

Tôi gặp phải vấn đề tương tự. Khi tôi chạy Unit Test trên mã C ++, tôi gặp lỗi "Không thể tìm thấy hoặc mở tệp PDB".

Nhật ký

Khi tôi nhìn vào Nhật ký đầu ra trong Visual Studio, tôi thấy rằng nó đang tìm kiếm trong thư mục sai. Tôi đã đổi tên thư mục WinUnit, nhưng có thứ gì đó trong mã WinUnit đang tìm kiếm tệp PDB bằng tên thư mục cũ. Tôi đoán họ đã mã hóa nó.

Tìm thấy vấn đề

Khi tôi lần đầu tiên tải xuống và giải nén các tệp WinUnit, thư mục chính được gọi là "WinUnit-1.2.0909.1". Sau khi giải nén tệp, tôi đã đổi tên thư mục thành "WinUnit" vì nó dễ nhập hơn trong quá trình thiết lập dự án Visual Studio. Nhưng rõ ràng điều này đã phá vỡ khả năng tìm thấy tệp PDB, mặc dù tôi đã thiết lập mọi thứ theo tài liệu WinUnit.

Sửa chữa của tôi

Tôi đã thay đổi tên thư mục trở lại ban đầu và nó hoạt động.

Kỳ dị.


0

Có cùng một vấn đề ở đây nhưng một giải pháp khác đã hoạt động.

Đầu tiên, tôi đã thử những cách sau, không có cách nào hoạt động:

  1. Tải các ký hiệu theo gợi ý của seanlitow

  2. Xóa / Thêm tham chiếu vào PresentationFramework và PresentationCore

  3. Khởi động lại hệ thống

Giải pháp là hoàn tác một số thay đổi cuối cùng mà tôi đã thực hiện đối với mã của mình. Tôi vừa thêm một vài nút radio và trình xử lý sự kiện cho các sự kiện đã chọn và chưa chọn. Sau khi xóa các thay đổi gần đây của tôi, mọi thứ đã được biên dịch. Sau đó, tôi đã thêm lại các thay đổi chính xác của mình và mọi thứ được biên dịch đúng cách. Tôi không hiểu tại sao điều này lại hiệu quả - điều duy nhất tôi có thể nghĩ là có vấn đề với Giải pháp VS của tôi. Dù sao, nếu không có đề xuất nào khác hoạt động, bạn có thể thử hoàn nguyên các thay đổi gần đây nhất của mình. LƯU Ý: nếu bạn đóng và mở lại Visual Studio, lịch sử hoàn tác của bạn sẽ bị mất .. vì vậy bạn có thể thử điều này trước khi đóng VS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.