2011-08-01 37 views
10

Tôi đang tìm cách đột nhập vào trình gỡ lỗi từ mã Java, mà không cần thiết lập một điểm ngắt trong IDE.DebugBreak tương đương trong Java?

Trong Win32 có DebugBreak(), trong C# có DebugBreak() Equivalent in C#, nhưng tôi không thể tìm thấy bất kỳ thứ gì trong Java.

Những gì tôi đang cố gắng làm: nói rằng tôi phải đợi với thời gian chờ 30 giây, nhưng trong điều kiện bình thường chờ đợi phải luôn là < 1 giây. Tôi muốn sử dụng ByteMan hoặc một cái gì đó tương tự như chờ đợi với thời gian chờ 1s đầu tiên, và đột nhập vào trình gỡ lỗi nếu chờ đợi đó hết thời gian chờ.

Trả lời

2

Các poster của câu hỏi này đã làm chính xác những gì tôi đang tìm kiếm: Secure Debugging for Production JVMs

Nó tái tạo các tính năng tốt nhất của DebugBreak, có nghĩa là bạn có thể đính kèm các IDE để chương trình của bạn chỉ sau khi "breakpoint" là hit.

3

Không phải là câu trả lời trực tiếp cho câu hỏi của bạn nhưng trong hầu hết các IDE, bạn có thể đặt conditional breakpoints.

Điều này sẽ yêu cầu bạn đặt biến thời gian trong mã của bạn trước thời gian chờ và kiểm tra giá trị của nó trong điểm ngắt của bạn, sau thời gian chờ. Bạn sẽ kích hoạt điểm ngắt có điều kiện nếu đồng bằng lớn hơn ngưỡng của bạn.

+0

Tôi đang cố gắng để làm điều này "tái sử dụng" vì vậy mà tôi không cần phải thay đổi mã tất cả các thời gian. Nếu biến timestamp được tiêm thông qua thao tác bytecode, tôi nghi ngờ IDEA sẽ cho phép tôi sử dụng nó trong một điều kiện breakpoint. Đề nghị tốt mặc dù, tôi sẽ thử nó. –

1

Tôi tạo ra lớp này

import com.sun.jna.Library; 

public interface Kernel32 extends Library { 

    public void OutputDebugStringA(String Text); 
    public void DebugBreak();  
} 

sau đó sử dụng nó như thế này:

Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class); 
lib.OutputDebugStringA("just before DebugBreak\n"); 
lib.DebugBreak(); 

và đó là nó. Nó gọi chức năng có nguồn gốc void WINAPI DebugBreak(void); bên Kernel32.dll

Bạn cũng cần file jar jna-4.4.0.jar

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