2008-11-07 24 views
17

Rất ít người trong chúng ta sẽ phủ nhận sự khiếp sợ của những kẻ lừa đảo, nhưng để làm cho nó hữu ích hơn, một số thủ thuật có thể được sử dụng.Đường dây giả yêu thích của bạn để đặt điểm ngắt trên là gì?

Ví dụ bằng Python, bạn có thể sử dụng qua làm hoàn toàn không có gì ngoại trừ để lại cho bạn phòng để đặt một điểm break và cho phép bạn quan sát các giá trị trong cửa sổ Watch.

Trong C#, tôi sử dụng để làm GC.Collect(), nhưng bây giờ tôi sử dụng if (false) {}

dòng giả vui tươi nhất của bạn là gì?

+0

Tại sao bạn sẽ cần một dòng giả để đặt một breakpoint trên? Khi nào bạn không thể sử dụng một dòng thực tế? –

+0

Charles, một số dòng được biên dịch trong IL, vì vậy không có nơi nào để đặt điểm ngắt. Tuy nhiên, .NET trong chế độ gỡ lỗi sẽ chèn một câu lệnh NOP vào vị trí của chúng, vì vậy bạn vẫn có thể phá vỡ chúng. – FlySwat

+0

Wiki cộng đồng? –

Trả lời

27

Trong C#, bạn có thể sử dụng này:

System.Diagnostics.Debugger.Break(); 

Nó sẽ buộc một breakpoint.

+1

đây là lý do tại sao tôi thích s.o. :) – Haoest

+0

FWIW, nó tương tự như câu lệnh 'debugger;' trong JavaScript. – orad

+1

Thật kỳ lạ khi điều này được chấp nhận là câu trả lời, vì nó không giải quyết được câu hỏi thực tế, mà là về một dòng có thể đặt điểm ngắt. Buộc một breakpoint là một vấn đề khá khác nhau. –

1

trong gcc/g ++:

assert("breakpoint"); 

từ bất kỳ phi-0/null giá trị cho một khẳng định được thực hiện như là sự thật.

hoặc thậm chí

__asm__("nop"); 

ít nhất tôi biết sẽ có một byte hướng dẫn phát ra cho Breakpoint xảy ra trên. ;)

5
volatile int e = 9; 

Biến động nghĩa là trình biên dịch sẽ không xóa nó vì tôi không đọc biến. '9' chỉ để nó không khác. Zero là quá phổ biến đối với sở thích của tôi.

+5

Nhiều lập trình viên sẽ sử dụng 42 – thepaulpage

+1

@tehp - Nhưng đó là một báo chí quan trọng khác và tôi là một kỹ sư lười biếng! WHINE! – Robert

0

Không phải là rất phức tạp, nhưng chức năng.

bool bp; 

bp = true; //whereever I need to break. 
0

Trong VB6, tôi tự sử dụng dấu hai chấm. :

1

tôi sử dụng

int x = 0; 

tôi luôn chắc chắn rằng tôi loại bỏ dòng này khi tôi đang thực hiện xong việc gỡ lỗi.

+0

xem câu trả lời của tôi, nhưng bạn nên thêm 'dễ bay hơi' để đảm bảo trình biên dịch không xóa nó. – Robert

+0

Thao tác này sẽ không hoạt động nếu bạn bật cài đặt 'Cảnh báo là lỗi '. – orad

0

Trong C++ Tôi sử dụng

Sleep(0) 

đôi khi, hoặc chỉ tìm thấy một biến mà được sử dụng và gán nó cho chính nó:

i = i; 
2

Tôi chưa bao giờ viết một cái gì đó đặc biệt để phá vỡ, nhưng nếu Tôi đã làm, tôi muốn viết

int moot; 

Tôi sử dụng cái này khi có một số thông số 'out' bắt buộc mà tôi không quan tâm nhưng phải cung cấp.

0

Đúng, thật lạ lùng khi trình sửa lỗi VS2010 thay đổi điểm ngắt xung quanh nếu chúng nằm trên một câu lệnh trống chẳng hạn như dấu chấm phẩy. Mặc dù những gì nó trông giống như, trong một xây dựng gỡ lỗi, bạn vẫn có thể thường đặt một breakpoint trên một khối điều khiển C# trống hoặc dấu chấm phẩy, và nó sẽ nhận được nhấn một cách chính xác. Sau khi bị khó chịu bởi điều này trong một thời gian, tôi vừa tạo này để sử dụng thay vì:

public static class Nop { public static void X() { } }; 

chỉnh sửa: Để sử dụng nó, đặt Nop.X() trong mã của bạn ...

+0

@NoonSilk, về tham số 'out' bắt buộc, tôi cũng sử dụng hàm trợ giúp khi tôi không muốn trả về một giá trị: "return Failed (out fn_out_param);" trong đó fn_out_param là tham số 'out' của hàm chứa, và hàm 'Failed' chỉ đặt tham số out thành không có gì. Điều này giữ cho statment trả về trong hàm tôi quan tâm tới một dòng. –

1

Đối với C/C++ Tôi sử dụng

__asm int 3; 

Điều đó sẽ tạo ra ngoại lệ điểm ngắt tại dòng mã mà trình gỡ lỗi sẽ bắt. Một báo trước mặc dù là chương trình của bạn sẽ sụp đổ với ngoại lệ đó nếu nó không được chạy bên trong một trình gỡ lỗi.

9

Trong C#, trong Visual Studio

{} 

hoặc

; 
+0

giải pháp thanh lịch – blagus

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