2012-03-09 27 views

Trả lời

10

mono --debug không liên quan gì đến trình gỡ rối, nó đơn giản làm cho Mono theo dõi thông tin gỡ lỗi để nó có thể cung cấp cho bạn thông tin về tệp/dòng/col trong backtraces.

Hành vi của System.Diagnostics.Debugger.Break() tùy thuộc vào phiên bản Mono của bạn. AFAIK ở dạng cơ bản của nó nó thiết lập một điểm ngắt cứng, vì vậy nếu ứng dụng của bạn không chạy trong một trình gỡ lỗi cứng bản địa thì nó sẽ đơn giản sụp đổ. Nếu ứng dụng của bạn đang chạy bên trong Trình gỡ lỗi mềm Mono với Mono 2.11 hoặc mới hơn (chưa được phát hành), nó sẽ đặt một điểm ngắt mềm cho trình gỡ lỗi mềm và hoạt động như mong đợi.

Cách cơ bản để bật gỡ lỗi bổ sung là đặt lệnh thực thi tùy chỉnh trong dự án addin của bạn. Mở 'Tùy chọn dự án', đến phần 'Chạy> Lệnh tùy chỉnh', thêm lệnh tùy chỉnh cho 'Thực thi'. Đặt tập tin thực thi thành MonoDevelop.exe và thư mục làm việc là thư mục chứa của nó. Điều này có nghĩa rằng khi bạn chạy/gỡ lỗi dự án của bạn, MD sẽ thực sự thực thi thực thi đó thay vì thực hiện dự án của bạn trực tiếp. Nếu MonoDevelop.exe tải trình bổ sung của bạn, thì bạn sẽ có thể đặt các điểm ngắt, bước, v.v.

Phần khó khăn ở đây là làm cho MD tải trình bổ sung của bạn. Một cách để làm điều này sẽ là để dự án của bạn xuất file dll bổ sung vào một trong các thư mục mà MD tìm kiếm các addins, nhưng đó là một điều rất khó để làm vào thời gian phát triển. Một giải pháp tốt hơn là sử dụng biến môi trường không có giấy tờ MONODEVELOP_DEV_ADDINS để chỉ định một thư mục bổ sung để MD tải các addins. Không có giao diện người dùng trong MD để đặt v.v. env cho lệnh tùy chỉnh nhưng được hỗ trợ nội bộ - bạn sẽ phải chỉnh sửa thủ công tệp csproj.

Tìm phần mà trông giống như:

<CustomCommands> 
    <CustomCommands> 
    <Command type="Execute" 
     command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe" 
     workingdir="..\..\..\monodevelop\main\build\bin" /> 
    </CustomCommands> 
</CustomCommands> 

Và thay đổi nó thành:

<CustomCommands> 
    <CustomCommands> 
    <Command type="Execute" 
     command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe" 
     workingdir="..\..\..\monodevelop\main\build\bin"> 
     <EnvironmentVariables> 
     <Variable name="MONODEVELOP_DEV_ADDINS" value="${TargetDir}" /> 
     </EnvironmentVariables> 
    </Command> 
    </CustomCommands> 
</CustomCommands> 

Nếu bạn đang tự hỏi tại sao các <CustomCommands> yếu tố này là hai sâu, đó là một lỗi được biết đến.

+0

Cảm ơn! Hoạt động như mong đợi. Tôi có các liên kết tới trình gỡ rối của addin trong thư mục AddIns, vì vậy tôi chưa thử MONODEVELOP_DEV_ADDINS – simendsjo

+0

@mhutch Mẹo hay, cảm ơn. Đặt 'MONODEVELOP_DEV_ADDINS' hoạt động, nhưng chỉ một lần. Trừ khi tôi bỏ tất cả các phiên bản của MD, bao gồm cả cá thể với dự án bổ trợ, chỉ có phần bổ sung được biên dịch đầu tiên mới được chọn. Có một số bộ đệm ẩn bổ sung đang diễn ra? –

+0

Lưu ý, đây là trên OSX. Trong Windows nó hoạt động. Mỗi biên dịch mới được nhận bởi XS –

0

trình gỡ lỗi mềm chưa hỗ trợ System.Diagnostics.Debugger.Break(), do đó sẽ không làm việc.

Bạn chỉ cần gỡ lỗi MonoDevelop bên trong MonoDevelop và đặt các điểm ngắt của bạn trên các tệp nguồn của phần bổ trợ của bạn.

+1

Bạn có thể giải thích điều đó không? 'Run> Debug Application> MonoDevelop.exe' không làm bất cứ điều gì .. – simendsjo

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