2011-01-28 61 views
1

當我的應用程序完成時,Visual Studio中的調試構建會打印出所有未分配的對象以及未釋放的分配的序列號。然後通常我只需要對_CrtSetBreakAlloc(x)進行調用,其中'x'是alloc seq數字,並在分配時獲得方便的ASSERT。然而,當COM對象發生泄漏時,這顯然不起作用。有沒有簡單的方法來使用分配序號讓執行停止在那裏? 我試着在dbgheap.c中設置一個條件斷點,它不會觸發任何一個,我不明白 - COM對象是作爲調試構建的。_CrtSetBreakAlloc跟蹤COM對象中的內存泄漏

回答

2

功能_CrtSetBreakAlloc只適用於您的模塊鏈接到的C運行時庫。在這種情況下,它將與鏈接到應用程序的C運行時庫一起工作。我假設你的COM對象存在於另一個模塊(大概是DLL)中。如果COM對象靜態鏈接到C運行時庫,那麼調用_CrtSetBreakAlloc將不會影響模塊邊界,因爲您的應用程序和COM模塊不共享相同的運行時和堆。

您可以修改COM模塊的源代碼/內部版本嗎?

+0

我可以;並且我將相同的調用插入到COM DLL中的一些構造函數中,並沒有幫助。我認爲構造函數是在那裏發生的第一個分配。我同意你的意見,但它並沒有向我解釋爲什麼手動斷點沒有觸發。 – 2011-01-29 01:01:07