簡體   English   中英

如何在 C 中調試(大)內存分配

[英]How to debug (large) memory allocation in C

我正在運行一個占用大量物理內存的 C 程序,我想調試這些大量分配發生的位置。 該程序有多個分支,其中一個分支正在將 RES 內存增加到 11.0G,如下所示(htop 的截取屏幕截圖)。

htop 的裁剪屏幕截圖

我的問題通常是如何在不閱讀malloc / calloc等代碼的情況下調試那些大內存分配?

現在我正在通過 gdb 查看核心轉儲,但這個bt輸出並沒有告訴圖片這些分配發生在哪里。

我一直在尋找類似於 dotnet dump analyze 或 PerfView 的東西。

我的問題通常是如何在不閱讀 malloc/calloc 等代碼的情況下調試那些大內存分配?

  1. 通過malloc等閱讀對您原來的問題沒有幫助
  2. 你想使用堆分析器。 TCmalloc 支持堆分析,它可以告訴您很多有關應用程序堆使用情況的信息。 還有其他堆分析器。

這篇文章也可能有幫助。

PS 從現有core轉儲中提取堆分析信息是可能的,但很難 而且你不太可能找到分配堆棧跟蹤。

最好的辦法是設置堆分析器並重現問題,而不是嘗試恢復事后信息。

暫無
暫無

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

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