Không thể gỡ lỗi Esri Addin cho ArcCatalog


8

Đó là một lần tung đồng xu cho dù câu hỏi này là câu hỏi về GIS.SE hay StackOverflow ... Tôi đang đi với GIS.SE vì vấn đề dường như nằm ở ArcCatalog.

Tôi có một số addins đã được viết cho ArcCatalog (và cả ArcMap); trước đây tôi đã có thể F5 gỡ lỗi mã bằng các điểm dừng bây giờ tất cả các điểm dừng của tôi không hoạt động với thông báo Điểm dừng hiện tại sẽ không bị tấn công. Không có biểu tượng nào được tải cho tài liệu này :

nhập mô tả hình ảnh ở đây

Tôi đã thử các đề xuất từ ​​Stack Overflow:

Khắc phục lỗi Điểm dừng hiện tại sẽ không được nhấn. Không có biểu tượng nào được tải cho tài liệu này.

Điểm dừng này sẽ không bị tấn công, Mã nguồn khác với bản gốc (ngay cả sau khi làm sạch / xây dựng lại)

Điểm dừng hiện tại sẽ không được nhấn. Không có biểu tượng đã được tải cho tài liệu này

và cũng

Tại sao điểm dừng không thể bị "đánh" khi gỡ lỗi Bổ trợ ArcGIS 10? nhưng điều này dường như là một vấn đề khác

Vì đây là một Addin (dll) nên không có dự án khởi động. Tôi đã làm sạch tất cả các phiên bản khác. Tôi đã thực hiện một thay đổi tinh tế cho tệp Esriaddinx message=để xác nhận những thay đổi đang được thực hiện - tất cả đều tốt, không có phiên bản cũ hơn.

Trong khi dọn dẹp, tôi nhận thấy rằng các addins cho ArcCatalog được sao chép vào %USERPROFILE%\Documents\ArcGIS\AddIns\Desktop10.X\{AddInID}\nơi các addins ArcMap không .. Tôi đã thử sao chép tệp pdb vào thư mục addin nhưng có vẻ như mã không còn được gỡ lỗi và ArcCatalog đã chuyển / chuyển hướng sang bản sao.

Có cách nào để gỡ lỗi với các addins breakpoint cho ArcCatalog không? Lưu ý rằng các bổ trợ ArcMap và các ứng dụng độc lập gỡ lỗi tốt.

Môi trường:

  • Windows 7 64 bit
  • ArcGis 10.1
  • Visual Studio 2010 Professional (cả VB.net và C #)

Tôi đã gặp vấn đề tương tự với ArcMap 10.3 kết hợp với Visual Studio 2013. Tôi đã tìm thấy tất cả các bài đăng tương tự mà bạn đã đề cập, và thực sự, tại một thời điểm tôi thực sự có thể gỡ lỗi và đạt điểm dừng. Nhưng vì một số lý do đã ngừng hoạt động sau một thời gian, và không có cách nào tôi có thể khiến nó hoạt động trở lại. Cuối cùng, tôi đã hoàn nguyên khung mục tiêu trong dự án của tôi trở lại từ .Net 4.5 thành .Net 3.5 và đặt hỗ trợR.78 trong .exe.config thành v2.0.50727. Điều đó đã giải quyết nó cho tôi. Có lẽ addin ArcCatalog của bạn sử dụng 4.5 và ArcMap one 3.5?
Berend

Đó là một khả năng @Berend. Khung mục tiêu (tất cả các cấu hình) được đặt thành Hồ sơ khách hàng .NET Framework 3.5 ... nên là 4 hoặc 4 Hồ sơ khách hàng? Công cụ này rất cũ, ban đầu được viết bằng VB6, nó đã được chuyển đổi thành .net trong ArcGis 9.3, sử dụng 3.5 nên khi nó được chuyển đổi thành một addin, khung không bị thay đổi - nó được biên dịch và chạy OK nên tôi không thấy cần phải thay đổi nó Tôi thực sự nghĩ rằng bạn đang ở một cái gì đó ở đây - một cái gì đó tôi chưa thấy trong các bài viết khác.
Michael Promotionson

ĐÓ LÀ NÓ @Berend !!! xin vui lòng viết đó như là một câu trả lời để thu thập tiền thưởng của bạn. Tôi đã thay đổi khung mục tiêu thành Hồ sơ khách hàng .NET Framework 4 và các điểm dừng hoạt động; Tôi biết rằng phải có một cái gì đó đơn giản nhưng được giấu kín mà tôi đang nhìn ... Cảm ơn bạn rất nhiều . Bây giờ tôi có thể gỡ lỗi mã này đúng cách.
Michael Promotionson

Câu trả lời:


2

Nâng cấp nhận xét ban đầu của tôi thành câu trả lời:

Tôi đã có một vấn đề tương tự với ArcMap 10,3 kết hợp với Visual Studio 2013. Tôi thấy tất cả các bài viết tương tự mà @ michael-dặm-Stimson đã đề cập, và trên thực tế, tại một thời điểm tôi có thể thực sự debug và nhấn một breakpoint. Nhưng vì một số lý do đã ngừng hoạt động sau một thời gian, và không có cách nào tôi có thể khiến nó hoạt động trở lại.

Cuối cùng, tôi đã hoàn nguyên khung mục tiêu trong dự án của tôi trở lại từ .Net 4.5 thành .Net 3.5 và đặt hỗ trợR.78 trong .exe.config thành v2.0.50727. Điều đó đã giải quyết nó cho tôi.

Nếu addin ArcCatalog sử dụng 4.5 và ArcMap one 3.5, điều đó sẽ giải thích hành vi được giải thích trong câu hỏi.

Tôi không nghĩ nó quan trọng nếu bạn sử dụng phiên bản Máy khách hoặc Phiên bản đầy đủ, tôi luôn có xu hướng sử dụng Đầy đủ, bởi vì tại một thời điểm, tôi dường như luôn thiếu một lớp không có trong phiên bản Máy khách.


Cảm ơn Berend. Điều đó hoàn toàn khắc phục vấn đề, lấy tiền thưởng với lời khen của tôi.
Michael Promotionson

1

Trong khi dọn dẹp, tôi nhận thấy rằng các addins cho ArcCatalog được sao chép vào% USERPROFILE% \ Documents \ ArcGIS \ AddIns \ Desktop10.X {AddInID} \ trong đó các addins ArcMap không

Trên thực tế, các bổ trợ Arcmap được sao chép vào vị trí đó sau khi cài đặt (hoặc một Build trong Visual studio).

Để giải quyết vấn đề này, hãy thử các bước sau:

  1. Làm sạch toàn bộ Giải pháp của bạn trong phòng thu trực quan bằng cách nhấp chuột phải vào giải pháp và chọn Giải pháp sạch

  2. nếu dự án addin arccatalog của bạn phụ thuộc vào các hội đồng bên thứ ba khác, thì hãy đảm bảo rằng các hội đồng đó có tệp .pdb (ký hiệu) bên cạnh chúng

  3. Trong studio trực quan, nếu bạn có các dự án khác trong giải pháp của mình rằng dự án arccatalog của bạn phụ thuộc vào chúng, thì hãy thêm tham chiếu dự án của chúng thay vì dlls của chúng. thích hình ảnh này:

nhập mô tả hình ảnh ở đây


Tôi đã làm sạch, đó là một trong những điều đầu tiên tôi đã làm, không có dự án nào khác hoặc hội đồng bên thứ 3 (có lẽ, điều này cần thư viện Excel v12) ... bạn có nghĩ các đối tượng Excel đang gây ra vấn đề này không? nếu vậy, làm thế nào tôi có thể nhận được tệp pdb cho điều đó - tôi không nghĩ Microsoft sẽ cung cấp cho tôi mã nguồn của họ bất kể phiên bản đó bao nhiêu tuổi.
Michael Promotionson

Rất có thể. Chỉ cần xóa các đối tượng excel, làm sạch và sau đó thử gỡ lỗi.
Farid Cheraghi

chia sẻ mã nguồn từ microsoft là không. Đối với pdb, google nó.
Farid Cheraghi

1
Excel / ArcObjects là những gì tôi cần gỡ lỗi. Vì một số lý do, nó sẽ chuyển qua trang tính về X và dừng lại. Tôi biết rằng ArcGis v10.x hỗ trợ bảng tính Excel tuy nhiên mã này và các trang tính được liên kết, có nguồn gốc trong ArcGis 9.1 và các trang tính không tuân thủ (tiêu đề nằm ở hàng 3). Bài đăng này đã đưa ra hướng dẫn về việc nhận pdb social.msdn.microsoft.com/Forums/office/en-US/ mẹo vì vậy tôi sẽ cung cấp cho nó một shot.
Michael Promotionson

1
Farid, vì hóa ra đó là phiên bản .NET framework gây ra sự cố. Điều này có thể có liên quan đến việc Excel không muốn chơi trò chơi với phiên bản cũ. Một trong nhiều bản cập nhật của Microsoft có thể đã gây rối với khả năng sử dụng các đối tượng Excel 12 trong .net 3.5.
Michael Promotionson

1

Ok, tôi vừa xác minh rằng tôi có thể bước qua mã bằng quy trình này. Tôi đang làm điều này trong ArcMap, nhưng tôi nghĩ nó nên áp dụng cho ArcCatalog vì quy trình xử lý các tệp DLL gỡ lỗi và không phải là một mục cụ thể ESRI. Tôi đã xác nhận điều này trong cả ArcMap 10.2.2 và ArcCatalog 10.2.2. Vì đây là quy trình Windows xử lý trực tiếp DLL, các phiên bản phần mềm ESRI không nên quan trọng.

Tôi đang sử dụng Visual Studio để đính kèm vào một quy trình .

Tôi có thể bước qua một phần mở rộng được biên dịch (DLL) bằng cách sử dụng quy trình này khi DLL được gọi trong một chương trình khác.

Đây là những gì tôi đang làm ...

Trong Visual Studio, mở dự án mở rộng của bạn. Tôi đã xây dựng tiện ích mở rộng của mình trong VS 2010 C # Express, nhưng tôi đang sử dụng VS 2013 Ultimate để làm điều này. Tôi không chắc chắn nếu Đính kèm quy trình là một tùy chọn trong phiên bản 2010 Express. Tôi đã không nhìn thấy nó, nhưng nó có thể bị ẩn ở đâu đó vì đây là phiên bản Express.

Mở sản phẩm ESRI của bạn và cài đặt bổ trợ. Bây giờ, quay lại VS, nhấp vào Đính kèm để xử lý và chọn quy trình sản phẩm ESRI của bạn. Của tôi là ArcMap.exe . Từ đây, Visual Studio sẽ đính kèm trình gỡ lỗi của nó vào chương trình và khi DLL được thực thi mà bạn đã mở và các điểm dừng được đặt, nó sẽ dừng ở đó. Điều này sẽ hoạt động như bất kỳ chương trình nào khác mà bạn đang gỡ lỗi trong Visual Studio. Nó có thể kéo dài một số gỡ lỗi vào một số mục ESRI mặc dù mã rất có thể bị xáo trộn nên không hữu ích lắm.

Tôi chắc chắn rằng tôi đã cài đặt bổ trợ từ thư mục Phát hành cho dự án của mình. Theo như tôi có thể nói, ESRI không sao chép DLL vào một trong các thư mục của nó, nhưng họ sử dụng Tiện ích đăng ký hội Esri của họ để đăng ký vị trí của DLL để hệ thống biết nơi tìm nó khi được tham chiếu từ sản phẩm ESRI.

FYI: Tôi sử dụng quy trình này để gỡ lỗi các thư viện lớp tôi viết trong một dự án đang được sử dụng trong một dự án khác. Lý thuyết tương tự ở đó nên áp dụng bổ trợ ESRI vì chúng chỉ là các thư viện lớp (DLL) được gọi vào một chương trình khác. Ngoài Visual Studio, tôi tin rằng bất kỳ trình gỡ lỗi Windows nào khác cũng có thể đính kèm vào DLL.

Xin vui lòng gửi ý kiến ​​về cái này Tôi đã nghĩ rằng nó sẽ hoạt động trong một thời gian và rất tò mò muốn xem những người khác công bằng với phương pháp này như thế nào.

EDIT Tôi vừa tạo một bổ trợ ArcCatalog mới, bao gồm một nút đơn giản. Tôi đã thêm một phép gán chuỗi string stophere = "debugger stopped!";trong trình xử lý sự kiện cho sự kiện nhấp chuột của nút. Thông qua ArcCatalog, nó đã dừng sử dụng phương thức Đính kèm để xử lý . Visual Studio 2010 thông tin về quá trình là ở đây .

Có một vài điều trên MSDN về việc gỡ lỗi DLL thông qua các phương thức khác nhau trong Visual Studio và Windows Debugger. Cá nhân tôi thấy Đính kèm để xử lý tốt hơn so với bắt đầu một phương thức chương trình bên ngoài và cũng tốt hơn so với sử dụng trình gỡ lỗi từ xa .

Nhược điểm duy nhất của phương pháp này là bạn mất phương pháp F5 nơi bạn gỡ lỗi trực tiếp từ bên trong Visual Studio. Vì vậy, điều đó có nghĩa là, thay đổi mã của bạn, cài đặt bản cập nhật, khởi động ArcCatalog, Đính kèm vào Quá trình, sau đó nhấn điểm dừng của bạn. Tuy nhiên, tôi thấy rằng phương pháp này là một phương pháp khá tốt để biết trong trường hợp bạn gặp phải vấn đề như bạn có. Quá trình này có thể lâu hơn một chút, nhưng nó là một phương pháp chắc chắn để có được kết quả của bạn.


Tôi có Visual Studio 2010 Professional , có một sự khác biệt lớn giữa ArcMap và ArcCatalog như đã nêu trong câu hỏi ... phần bổ trợ ArcMap của tôi gỡ lỗi rất tốt. Khi tôi viết mã này dưới dạng mã COM (ArcGis 9.3.1), nó hoạt động rất tốt .... thực sự, nghĩ về điều đó, tôi nên chắc chắn rằng các phần mở rộng Esri rất cũ (9.3.1) cũng đã biến mất. Bạn đã nói gì trong nhận xét của mình về việc chỉnh sửa ArcCatalog.exe.config, bạn có thể chỉ cho tôi nửa tá dòng đầu tiên được không. Hãy thử tạo một addin ArcCatalog rất ít (hộp thông báo là đủ) và xem bạn có thể gỡ lỗi không.
Michael Promotionson

@ MichaelMiles-Stimson ... nhận xét đó có ý nghĩa gì cho câu trả lời này không? Ngoài ra, tôi đã chỉnh sửa câu hỏi của mình để thêm thông tin và thử nghiệm với ArcCatalog. Phương pháp của tôi hoạt động nhưng bạn không thể F5 từ bên trong Visual Studio, bạn cần thực hiện thêm một chút công việc nhưng vẫn đạt được kết quả tương tự mà không phải xử lý các tệp cấu hình.
Branco

Branco, cảm ơn câu trả lời chu đáo của bạn nhưng hóa ra đó là phiên bản .NET framework gây ra sự cố.
Michael Promotionson

1

Đây là một tệp tôi đã xây dựng trong một vài năm lộn xộn với các phần mở rộng ArcMap & ArcCatalog và sau đó là Bổ trợ:

Những thứ có thể ngăn ArcMap gỡ lỗi Bổ trợ trong Visual Studio:

  • Chế độ phát hành thay vì chế độ Gỡ lỗi (nếu sử dụng phương pháp không bổ trợ cũ, đây có thể là một vấn đề vì rất có thể \ bin \ Debug dll đã được đăng ký với regasm, không phải \ bin \ Release
  • Các phiên bản cũ của công cụ trong giao diện người dùng ngăn chặn phiên bản gỡ lỗi được tải (khởi động ArcMap mà không cần Visual Studio, xóa tất cả các lệnh và xóa tất cả bổ trợ, đóng ArcMap)
  • Có khả năng phiên bản không bổ trợ đang được sử dụng không? Nếu không, dll phải được đăng ký
  • Không bao giờ cần phải tự cài đặt bổ trợ để gỡ lỗi
  • Làm sạch giải pháp & dự án, sau đó xem thủ công các tệp ứng dụng và xóa tất cả nội dung / bin và / obj
  • Làm trống nội dung của C: \ Users \ <NAME> \ Local Settings \ ESRI \ Desktop10.0 \ AssociationCache
  • Đảm bảo mọi vị trí dự án \ bin khác trước đây / có thể được ArcMap tham chiếu trong khi gỡ lỗi không có dlls / Bổ trợ được xây dựng trước đó cùng tên với phiên bản bạn đang cố gắng gỡ lỗi (ví dụ: phiên bản di chuyển / bổ trợ mạng chấm sự xung đột)
  • Trong một số điểm dừng bổ trợ sẽ chỉ khả thi sau khi nhấp vào nút của công cụ - đó là khi nó được khởi chạy
  • Nếu không có điểm dừng nào bị tấn công, có thể có một ngoại lệ được ném vào hàm tạo và công cụ không chạy. Kiểm tra điều này bằng cách hiển thị tất cả các ngoại lệ CLR thông qua menu Gỡ lỗi -> Ngoại lệ -> kiểm tra 'Ngoại lệ thời gian chạy ngôn ngữ chung'
  • Nếu vẫn thất bại, khởi động lại

Cảm ơn vì nỗ lực, tất cả những điều đó đã được giải quyết trong bài đăng được liên kết .. Berend có câu trả lời đúng (lần này) vì đây không phải là một trong những nghi phạm thông thường.
Michael Promotionson

0

Đây là giải pháp:

Hãy thử loại bỏ ManagedR.78 khỏi arcmap.exe.config, trong thư mục bin.

Đây là tệp xml \ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config.

Tại sao điểm dừng không thể bị "đánh" khi gỡ lỗi Bổ trợ ArcGIS 10?


Tôi đã tham khảo bài viết đó trong câu hỏi. Đây không phải là về ArcMap, nó hoạt động tốt, đó là ArcCatalog gây ra vấn đề. Rất cố gắng nhưng. Tôi nghĩ rằng tôi sẽ phải cung cấp một tiền thưởng cho cái này.
Michael Promotionson

Xin chào @ MichaelMiles-Stimson Bạn đã thử chỉnh sửa ArcCatalog.exe.config chưa? Đối với các addin cuối cùng tôi phát triển Tôi uncomment này <! - <supportedRuntime version = "v4.0.30319" /> -> và thay vào đó nhận xét này <supportedRuntime version = "v2.0.50727" />
rowanwins

Tôi không thể tìm thấy <hỗ trợR phiên bản = "v2.0.50727" /> để nhận xét @rowanwins. Giả sử tôi có một bản sao lưu và muốn xóa dòng thay vào đó là những gì trong bao vây <startup>? Có một lý do tại sao dòng này được bình luận?
Michael Promotionson

Có lẽ @rowanwins bạn có thể đưa ra câu trả lời, điều đó sẽ cho phép ít nhất một ảnh chụp màn hình về những gì bạn đang cố gắng diễn đạt và có khả năng thêm một vài từ nữa và tôi sẽ điều tra vào ngày mai ... về nhà!
Michael Promotionson

0

Một số bước rõ ràng (tôi cho rằng bạn đã thử những điều này..nhưng vẫn còn).

  1. Kiểm tra xem Chế độ vẫn là "Gỡ lỗi" thay vì phát hành.
  2. Xóa các thư mục "obj" và "bin" và xây dựng lại.

Vâng, đã làm điều đó. Điều đó đã được đề cập trên một trong những bài viết tràn stack. Nó phải là một cái gì đó ít rõ ràng hơn.
Michael Promotionson
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.