2009-03-18 40 views
5

Tôi muốn thêm điều kiện điểm ngắt vào mã của tôi trong VC++ Express 2005, để điểm ngắt chỉ kích hoạt nếu biến cục bộ đáp ứng tiêu chí được chỉ định. ví dụ.Cách thêm điểm ngắt có điều kiện trong Visual C++

bool my_test(UIDList test_list) { 
    foo(test_list); 
    bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0 
    print(test_list); 
} 

Có phải nhấp vào breakpoint của tôi và chọn "Điều kiện ..." Tôi đã tìm thấy một hộp thoại xuất hiện để làm những gì tôi muốn, tuy nhiên bất cứ điều gì tôi cố gắng gõ vào kết quả lĩnh vực văn bản trong các lỗi sau:

Unable to evaluate the breakpoint condition: CX0052: Error: member function not present

Tôi đã thử tài liệu trợ giúp, nhưng tôi không thể tìm thấy câu trả lời của mình. Tôi hy vọng một người nào đó có kinh nghiệm trong VC++ có thể chỉ cho tôi đúng hướng ...

Trước đây tôi đã thử nâng cấp lên phiên bản mới hơn của VC++ Express, nhưng dự án không nhập rõ ràng. Do sự phức tạp của dự án và quy mô thời gian hiện tại của tôi, tôi không thể xem xét nâng cấp như một giải pháp tại thời điểm này.

Trả lời

8

sử dụng DebugBreak(); Chức năng:

bool my_test(UIDList test_list) { 
    foo(test_list); 
    if (bar(test_list) /* or whatever check :) */) // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0 
     DebugBreak(); 
    } 
    print(test_list); 
} 

Hoặc bạn có thể luôn luôn sử dụng assert (expression)

bool my_test(UIDList test_list) { 
    foo(test_list); 
    bar(test_list); 
    assert(test_list.Length() > 0); // will break here 
    print(test_list); 
} 
4

Các điều kiện trong điểm ngắt không thể gọi các phương thức theo như tôi biết. Vì vậy, những gì bạn cần làm là để tính toán chiều dài trước khi tay. Một cái gì đó như thế này.

 
 
bool my_test(UIDList test_list) { 
foo(test_list); 
int i = test_list.Length(); 
bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0 
print(test_list); 
} 
 

Đặt một breakpoint có điều kiện về giá trị của tôi ở đây và bạn sẽ ổn thôi.

10

VS có một số engines- vi đánh giá trong các cửa sổ theo dõi biến, cửa sổ trước mắt, phá vỡ điều kiện điểm vv Tôi có thể không bao giờ tìm tài liệu phong nha về chúng. Theo như tôi có thể nói họ là cầu kỳ về phương pháp họ sẵn sàng gọi, nhưng họ cũng không nhạy cảm với các giới hạn truy cập.
Vì vậy, bạn có lẽ có thể nói lại cho rõ tình trạng của bạn từ

test_list.Length() > 0 

một cái gì đó giống như

test_list.m_nLength > 0 

(hoặc bất cứ chiều dài var tin của bạn là).

(CHỈNH SỬA) Chỉ cần tìm thấy this msdn page giải thích biểu thức trình gỡ lỗi có thể và không thể xử lý. Vì vậy, đầu tiên, indeed -

'The debugger can access all class members regardless of access control. You can examine any class object member, including base classes and embedded member objects.'

Và thứ hai, tôi đoán về sự thất bại để đánh giá 'Chiều dài()' - đó có lẽ inlined:

'A debugger expression cannot call an intrinsic or inlined function unless the function appears at least once as a normal function.'

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