2011-09-12 28 views
6

我有以下代碼:如何在Visual Studio中按匿名命名空間中的函數名稱設置斷點?

namespace 
{ 
    void Foo() 
    { 
    } 
} 

namespace Bar 
{ 
    void Foo() 
    { 
    } 
} 

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

    return 0; 
} 

我想通過名字把斷點Foo()匿名命名空間內(按Ctrl + B鍵綁定)。我可以在命名命名空間Bar中爲函數執行,而不會產生名稱爲Bar::Foo的問題。我嘗試了anonymous namespace::Foo匿名命名空間,但VS無法解析這個名字,我猜是因爲名字中的空白字符。此外,我試圖把不同的引號,但沒有運氣。有沒有可能把這個斷點?

+0

你剛試過':: Foo'嗎? –

+0

':: Foo'也失敗了 – ks1322

+0

不知道,但你可以嘗試在函數內部定義一個類型並使用'typeid(T).name'輸出它的名字(你需要包含''header)將會看到函數是如何被引用的。 –

回答

3

很久以前我遇到過類似的問題(Debugging data in 'anynomous namespaces' (C++))。我想查看一個未命名名稱空間中的數據成員的值,但是我無法完成此操作。

最後,有人指着我http://msdn.microsoft.com/en-us/library/0888kc6a%28VS.80%29.aspx。也許你可以得到裝飾的函數名稱並在其上放置一個斷點。

+0

是的,這有幫助。我有使用'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)並在其上放置斷點。看起來在VS中沒有其他辦法。 – ks1322

0

它看起來像Visual Studio不能按匿名命名空間內的函數名稱設置斷點。即使WinDbg也無法做到這一點。

如果您有源代碼,您可以逐行設置斷點。

+0

可以通過裝飾函數名稱來完成。在另一個答案中看到我的意見。 – ks1322

+0

是的,它工作。我將斷點設置爲?Foo @?A0xac6cc1fe @@ YAXXZ。我以前嘗試過,但我首先錯過了?符號。 –

相關問題