我剛剛把我的頭髮拉出來,試圖讓儀器咳嗽起來,故意造成內存泄漏。我的測試示例如下所示:在Mac上使用儀器進行內存泄漏檢查
class Leaker
{
public:
char *_array;
Leaker()
{
_array=new char[1000];
}
~Leaker()
{
}
};
void *leaker()
{
void *p=malloc(1000);
int *pa=new int[2000];
{
Leaker l;
Leaker *pl=new Leaker();
}
return p;
}
int main (int argc, char **argv)
{
for (int i=0; i<1000; ++i) {
leaker();
}
sleep(2); // Needed to give Instruments a chance to poll memory
return 0;
}
基本上,儀器從未發現明顯的泄漏。我爲什麼要瘋了,但後來在泄漏面板下的「泄漏配置」面板中發現了「自動檢測之間的秒」。我把它撥回到最低點,這是1秒鐘,並將睡眠(2)放在我的密碼中,瞧;發現泄漏!
就我而言,泄漏就是泄漏,無論它發生在應用程序30分鐘或30毫秒內。在我的情況下,我將測試用例剝離回上面的代碼,但我真正的應用程序是一個沒有UI或任何東西的命令行應用程序,它運行速度非常快;肯定小於默認的10秒採樣間隔。
好的,所以我可以在儀表模式下退出我的應用程序時生活幾秒鐘,但我真正想要的是簡單地在退出時使用Instruments快照內存,然後在應用程序中隨時隨地執行任何操作在跑。
所以......問題是:是否有辦法在應用程序退出時使儀器快照存儲,而不管採樣間隔?
乾杯,
巴蒂爾
是的,我同意,Instruments似乎適用於事件驅動的環境。另外,由於iPad/iPhone編程,我的XCode始終處於最新版本。 DTrace是一個很好的建議,我會研究它。 在這一點上,我真的認爲我會在最後2秒鐘離開。它有效,但有點煩人。 – Shane 2010-06-29 02:33:10