2011-09-12 25 views
6

Tôi có đoạn mã sau:Cách đặt điểm ngắt theo tên hàm bên trong không gian tên ẩn danh trong Visual Studio?

namespace 
{ 
    void Foo() 
    { 
    } 
} 

namespace Bar 
{ 
    void Foo() 
    { 
    } 
} 

int main() 
{ 
    Foo(); 
    Bar::Foo(); 

    return 0; 
} 

Tôi muốn đặt breakpoint trên Foo() bên trong namespace giấu tên theo tên (phím Ctrl + B ràng buộc). Tôi có thể làm điều đó cho chức năng bên trong không gian tên có tên Bar mà không có vấn đề gì theo tên Bar::Foo. Tôi đã thử anonymous namespace::Foo cho không gian tên ẩn danh nhưng VS không phân tích cú pháp tên này, tôi đoán vì ký tự khoảng trắng trong tên. Ngoài ra tôi đã cố gắng để đặt dấu ngoặc kép khác nhau nhưng không có may mắn. Có thể nào để đặt điểm ngắt này?

+0

bạn đã thử chỉ ':: Foo'? –

+0

':: Foo' cũng không thành công – ks1322

+0

Dunno, nhưng bạn có thể cố gắng xác định một loại bên trong hàm và xuất tên của nó bằng' typeid (T) .name' (bạn cần bao gồm '' header), và có thể có bạn sẽ thấy cách hàm được đề cập đến. –

Trả lời

3

Tôi gặp phải sự cố tương tự cách đây một thời gian dài (Debugging data in 'anynomous namespaces' (C++)). Tôi muốn nhìn vào giá trị của một thành viên dữ liệu trong một không gian tên không tên, nhưng tôi không thể làm được điều này.

Cuối cùng, ai đó đã chỉ cho tôi http://msdn.microsoft.com/en-us/library/0888kc6a%28VS.80%29.aspx. Có lẽ bạn có thể nhận được tên chức năng trang trí và đặt một điểm dừng trên đó.

+0

Vâng, điều này đã giúp. Tôi đã có tên chức năng được trang trí bằng cách sử dụng 'dumpbin.exe/symbols breakpoits.obj' [http://msdn.microsoft.com/en-us/library/b842y285(v=vs.80).aspx](http:/ /msdn.microsoft.com/en-us/library/b842y285(v=vs.80).aspx) và đặt điểm ngắt trên đó. Có vẻ như không có cách nào khác trong VS. – ks1322

0

Dường như Visual Studio không thể đặt điểm ngắt theo tên hàm bên trong không gian tên ẩn danh. Ngay cả WinDbg cũng không thể làm được điều này.

Nếu bạn có nguồn, bạn có thể đặt điểm ngắt theo dòng.

+0

Có thể làm điều đó bằng tên chức năng được trang trí. Xem nhận xét của tôi trong câu trả lời khác. – ks1322

+0

Có, nó hoạt động. Tôi đặt điểm dừng cho Foo @? A0xac6cc1fe @@ YAXXZ. Tôi đã thử điều này trước đây nhưng tôi đã bỏ lỡ đầu tiên? ký hiệu. –

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