2009-01-08 40 views
36

Khi viết plugin cho trung tâm truyền thông, plugin của bạn được lưu trữ trong ehexthost.exe exe ​​này được khởi chạy từ ehshell.exe và bạn không có cách nào khởi chạy trực tiếp, thay vào đó bạn chuyển một thông số đặc biệt tới ehshell.exe sẽ khởi chạy plugin trong một quy trình riêng biệt.Tự động đính kèm quy trình con vào Visual Studio trong khi gỡ lỗi

Khi chúng tôi đang gỡ lỗi media browser Tôi tìm thấy quá trình đính kèm vào loại quy trình thứ hai của clunky, tôi biết về Debugger.Attach và một số mục nhập special registry tôi có thể sử dụng.

Cả hai phương pháp này không khớp chính xác với hóa đơn của tôi. Những gì tôi muốn là nhấn F5 và có trường hợp hiện tại của studio hình ảnh gắn liền với quá trình con tự động. Điều này có thể được thực hiện?

Nếu có plugin cho VS cho phép tôi đạt được chức năng này, tôi sẽ hài lòng với nó.

EDIT

tôi đã kết thúc đi với macro sau:

Public Sub CompileRunAndAttachToEhExtHost() 

    DTE.Solution.SolutionBuild.Build(True) 
    DTE.Solution.SolutionBuild.Debug() 

    Dim trd As System.Threading.Thread = New System.Threading.Thread(AddressOf AttachToEhExtHost) 
    trd.Start() 

End Sub 

Public Sub AttachToEhExtHost() 
    Dim i As Integer = 0 
    Do Until i = 50 
     i = i + 1 
     Try 

      For Each proc As EnvDTE.Process In DTE.Debugger.LocalProcesses 
       If (proc.Name.IndexOf("ehexthost.exe") <> -1) Then 
        proc.Attach() 
        Exit Sub 
       End If 
      Next 
     Catch e As Exception 
      ' dont care - stuff may be busy 
     End Try 
     Threading.Thread.Sleep(100) 
    Loop 
End Sub 

Ngoài ra, tôi vạch ra quá trình về cách get this going trên blog của tôi.

+1

có cách khác với giao diện Debugger2 mới, http://www.codeplex.com/lazy/SourceControl/changeset/view/20095#307770 –

+0

Có lợi thế nào khi sử dụng giao diện Debugger2 không? –

+0

có, thay vì lặp trên DTE.Debugger.LocalProcesses bạn chỉ có thể nhận được quá trình proc = debugger2.GetProcesses (trans, "") .Item (processName) –

Trả lời

37

Tôi sẽ sử dụng macro. Tôi đã xác định lại chức năng F5 của mình để đính kèm vào quy trình asp.net thay vì xây dựng/xác nhận lâu dài nó thường hoạt động. Điều này làm việc khá tốt cho tôi và nó thực sự dễ dàng.

For Each process In DTE.Debugger.LocalProcesses 
     If (process.Name.IndexOf("aspnet_wp.exe") <> -1) Then 
      process.Attach() 
      Exit Sub 
     End If 
    Next 
+1

Cảm ơn lời khuyên tuyệt vời! –

+0

Cảm ơn người đàn ông, tôi sử dụng này để đính kèm vào WebDev.WebServer và IE khi tôi nhấn F4 –

+2

bất kỳ đề xuất làm thế nào để làm điều này trong VS2012 bây giờ mà họ đã loại bỏ các macro? – mutex

0

Bạn có thể tự động đính kèm vào một quá trình bằng cách nhấn F5, nếu bạn thiết lập một cái gì đó như thế trong visual studio:

http://vvcap.net/db/ujYL7zeN_n_RgeprqCSM.htp

thông báo: Có "Command" lấp đầy như một tên thực thi, và " Đính kèm "phải" có "

+0

Cảm ơn! Nhưng thủ thuật này không hoạt động cho các dự án C# mà bạn không có tùy chọn như thế trong danh sách gỡ lỗi, chỉ có tùy chọn để bắt đầu một chương trình bên ngoài –

+0

Tôi nghĩ rằng tôi biết ý bạn là gì ... bạn có thể tạo dự án "giả" C++ và thêm nó vào giải pháp của bạn. Miễn là nó đính kèm một tập tin thực thi đúng, bạn tốt để gỡ lỗi. – galets

11

Kiểm tra plugin VisualStudio mà tôi đã viết, có tên là Lazy.

+0

+1 sẽ thử nó và xem cách tôi đi –

+0

cảm ơn, tôi đã viết nó khi tôi có một kịch bản tương tự như của bạn, quá trình của tôi được gọi bởi quá trình khác và tôi cần gỡ lỗi quá trình khởi tạo của mình vì vậy tôi cần phải đính kèm nó ngay sau khi nó bắt đầu. Nếu bạn có bất kỳ câu hỏi cho tôi biết. "Nó hoạt động trong máy của tôi" –

+1

plugin tuyệt vời - cảm ơn! –

14

Đối với VS2012, macro đã bị xóa nhưng bạn vẫn có thể thực hiện nhanh chóng bằng các phím tắt chuẩn. Ví dụ, để đính kèm vào iisexpress.exe:

Ctrl +Alt +p - sẽ làm xuất hiện gắn với quá trình thoại

i - nhảy đến quá trình đầu tiên bắt đầu với i trong danh sách (đối với tôi đây là iisexpress.exe)

Nhập - gắn

Đối với siêu tốc độ, bạn cũng có thể Turn off Visual Studio Attach security warning when debugging IIS.

+2

Tuyệt vời! Tôi tự hỏi tại sao nó không được biểu thị trong menu. – Bora

2

Tôi đã gỡ một ++ Plugin C trong một quá trình bên ngoài sinh ra mà bị rơi bằng cách ném một ngoại lệ lúc khởi động và điều này đã làm việc một cách hoàn hảo đối với tôi:

Thêm miễn phí Reattach Extension for Visual Studio. Yêu cầu nó gắn lại với tên quy trình trước khi nó được khởi chạy.Nó sẽ bật một hộp thoại kiểu cho biết nó đang chờ tên quá trình khởi chạy.

Bây giờ khởi chạy quá trình và trình gỡ lỗi Visual Studio sẽ đính kèm ngay lập tức, bắt ngoại lệ và nhấn điểm ngắt.

(Điều này cũng nằm trong plugin phương tiện truyền thông, ngoại lệ thường bị bắt và bị thu hồi bởi quy trình lưu trữ trong ngữ cảnh Delphi vì vậy tôi cần phải giải quyết trước khi điều đó xảy ra).

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