2009-12-13 82 views
1

單步執行使用NSGeometry.h中任何NS_INLINE函數的代碼會導致調試器失去與當前指令指針的同步,從而使調試例程非常困難。NS_INLINE和Xcode調試器

我試過#undef NS_INLINE我實現文件,#define NS_INLINE在預編譯頭的頂部,尋找雜注,編譯器開關等,但無論怎樣,該函數總是內嵌彙編爲我調試版本。

FWIW - NSMakeRect,NS_MakeSize等全部內聯編譯。

問題是,我該如何讓NS_INLINE編譯爲空?

回答

0

這是真的關於逐步通過內置的API函數,或者你是否試圖在自己的代碼中做類似的事情?如果是前者,是因爲好奇還是其他調試原因?如果是後者,我建議在調試時註釋掉NS_INLINE。如果您嘗試更改現有API函數的內聯行爲,您可能會感到失望,並且可能有更好的方法來解決它。如果你的意圖是別的,請澄清以便我們能夠充分回答。

+1

他不能註釋掉NS_INLINE,因爲它位於標題中他的問題是,當他執行Step Into時,它顯示當指令指針遠遠超出它時,堆棧幀仍然在內聯函數中。這是一個已知的bug。 – cdespinosa 2009-12-13 19:04:39

+0

正確。在Quicksilver代碼基礎上,這個問題會干擾修復錯誤並理解代碼在做什麼。 – Paul 2009-12-14 02:23:07

1

NS_INLINE被包裹在#if !defined(NS_INLINE)中。在包含基礎標題之前,您只需要適當地定義它。看一下原始聲明,你可能只需要刪除__attribute__((always_inline))就可以讓調試器捕捉你的符號(假設你正在生成所有調試符號並運行一個調試版本 - 如果沒有,那麼你可以做更多的工作來獲得理想情況下,您只需在您的項目/組/庫中創建自己的標籤,以便您可以更輕鬆地調試您自己的代碼。