2010-01-05 43 views
1

我正在開發一個使用混合Obj-C和C++的iPhone應用程序。似乎有時候,從Obj-C文件跨步到C++文件時,gdb報告的各個字段的值完全是假的。例如,在一個方法中:Xcode中的GDB只是flakey?

int count = 1;

對(INT I = 0;我<計數; ++ⅰ){

int x = 0; // put a breakpoint here to see how many times it gets hit. 

}

在這個例子中

,有時GDB將報告爲 '計數' 比以外的值'1'。例如,它可能是126346。但是,單步執行代碼時,循環僅迭代一次,表明'count'的值實際上是期望值。

我是Xcode的新手。我可能只是缺少一些基本的東西但它很難懷疑你的工具。有沒有人在這方面看到過奇怪的事情?解決了嗎?

回答

2

正如你所說,我還沒有看到gdb打印錯誤的變量 - 但是,如果你在發佈版本而不是在Debug版本中編譯,你可以運行一些奇怪的代碼被優化掉或者不能看到一些變量。

從你的描述來看,它幾乎看起來更像是你的「count」有一個未初始化的值。如果你的代碼看起來像:

int count; 

再算上可能是相當多的東西,因此有時會是0 - 但有時一些大的隨機數。

+0

我同意當調試器告訴你count的值是一個驚人的大值時,未初始化(或損壞的)內存肯定是需要查找的東西,但是循環只迭代一次清楚地表明gdb報告的值和執行期間代碼使用的內容不一致。 – Eric 2010-01-05 05:44:25

+0

它取決於您何時輸出以查看值。 Nithin在他的回答中有很好的例子。 – 2010-01-05 08:13:27

0

看到奇怪,在這方面和其他許多人。從未解決。

有時使用GDB控制檯直接有所幫助。 Xcode對GDB進行封裝的方式絕對是flakey。

1

你確定你一直都在收到count的'value',使用NSLog並在console中看到這個值。我認爲它會永遠顯示1 此外,

int count = 1;// put a breakpoint here to see the value of count, before and after execution of the statement. 

for (int i = 0; i < count; ++i) { 

    int x = 0; 

} 

當斷點時,特定的線路沒有命中,而步throuogh看到值的變化,最初由GDB給出的值會是一些隨意的值,因爲變量沒有被初始化,並且一旦它被初始化,值就變成新的值

+0

這似乎很可能對我來說...... gdb應該永遠不會遇到顯示int值的問題! – 2010-01-05 08:14:02

+0

在初始化之前和釋放一個對象之後,這發生在xcode中,可能會顯示大小,位置或類似於爲變量分配的內容。我不確定哪一個,但這是發生在這裏的事情,無論如何,這不妨礙我們的守則,有什麼需要落後於此。一旦我們初始化變量,它就必須按照我們的意圖工作,直到我們發佈它,這就是所有。 – Nithin 2010-01-05 08:39:59