簡體   English   中英

在C ++中查找未知對象的類型

[英]Finding the type of an unknown object in C++

檢查程序是否存在內存泄漏的方法有很多種。 你最終得到了泄漏內存塊的指針列表,但有沒有一種很好的方法可以找到每個塊的更多信息? 例如:如果我知道對象是一個字符串,實際的字符串值可以使泄漏更容易找到。

是否存在使RTTI成為可能的后門?

要解決的問題是,當你得到指針時,運行時系統已處於關閉狀態,你得到原始內存塊指針而不是指向對象的指針(盡管在很多情況下可能是相同的)。

RTTI可能對您沒有幫助。 RTTI僅在類具有虛方法時才有效,並且並非所有分配都是具有虛方法的對象。

您真正需要做的是有一些方法將堆棧跟蹤附加到您的分配。 然后,您可以獲取有關內存分配位置的信息。 如果它是泄漏內存的對象,你會尋找一個類構造函數。

無論如何,那里有這樣的東西嗎? 是。 適用於Windows的免費庫是Visual Leak Detector 有更多功能齊全的商業產品(如Bounds Checker和IBM的Rational Purify),但VLD效果很好。 它幫助我無數次發現內存泄漏。

我使用valgrind --leak-check = full,這將給我一個每個泄漏塊的分配站點堆棧跟蹤 此信息的方式更為有用的不僅僅是類型信息。 valgrind (發音像“Val grinned”) 岩石

像諾曼一樣,我提倡valgrind 對於分析堆棧跟蹤來說,這是一個很好的建議!

我在KDevelop中使用它構建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM