Конференция "Основная" » Использование FastMM в качестве отлова утечек памяти [D5]
 
  • harisma © (31.10.13 13:42) [0]
    У нас есть большой проект. Состоит из екзешника и множества дополнительных dll и bpl. Екзешник, библиотеки и пакеты собраны с рантайм библиотеками. Проект написан на Д5.
    Подключаю вместо стандартного дельфового менеджера памяти этот самый FastMMю Подключаю его только в екзешник.
    Из опций в файле FastMM4Options.ini в сравнении со стандартными, включил следующие:
    {$define NeverUninstall}
    {$define UseRuntimePackages}
    {$define NoDebugInfo}
    {$define NoMessageBoxes}
    {$define FullDebugMode}
    {$define CatchUseOfFreedInterfaces}
    {$define ClearLogFileOnStartup}

    После простого запуска программы получаю довольно большой файл отчета об утечках. Но некоторые участки выглядят совсем неинформативно, например:

    A memory block has been leaked. The size is: 36

    This block was allocated by thread 0x1FD0, and the stack trace (return addresses) at the time was:
    40002C3A [System][@GetMem]
    40004BB5 [System][@NewAnsiString]
    40004B4C [System][@LStrAsg]
    303078 [Cmtools][LibraryFunctionRegister]
    62E79E8 [WindowsExt.pas][WindowsExt][WindowsExt][5710]
    40004630 [System][@TryFinallyExit]
    40004806 [System][@StartLib]
    62EC5D4 [S4CliPrm][S4CliPrm][29] <- это подгрузка S4CliPrm.dll
    77A089D8 [wcsncmp]
    77A15C71 [EtwEventRegister]
    77A0F658 [RtlImageDirectoryEntryToData]

    The block is currently used for an object of class: AnsiString

    The allocation number is: 419896
    ....


    Вопрос:
    - правильно ли я выставил опции для FastMM для отлова утечек?
    - нужно ли подключать модуль FastMM4 также и в каждую из библиотек, чтобы файл отчета был более информативным?
    - среди опций FastMM есть группа опций типа ShareMM. Как с ними работать и помогут ли они мне?
  • DVM © (01.11.13 23:54) [1]

    > - нужно ли подключать модуль FastMM4 также и в каждую из
    > библиотек, чтобы файл отчета был более информативным?

    В каждой dll свой менеджер памяти. Этот менеджер там FastMem? Если нет, то подключать его надо.
  • harisma © (04.11.13 18:18) [2]
    В Dll FastMM я не подключал. Но сами dll реализуют COM объекты. Эти dll подгружаются в адресное пространство екзешника, который скомпилирован с FastMM. Вот я и спрашиваю, нужно ли и в DLL подключать модуль FastMM?
  • DVM © (04.11.13 19:00) [3]

    > harisma ©   (04.11.13 18:18) [2]

    Надо подключать.
  • harisma © (04.11.13 19:26) [4]
    А как тогда обеспечить их совместную корректную работу? Нужно ли для этого задействовать опции ShareMM? И если "Да", то их надо выставлять и для каждой из DLL и хост-приложения или как?
    Если кто уже по этому пути прошел, нельзя ли подробно это все описать?
  • DVM © (04.11.13 19:41) [5]

    > harisma ©   (04.11.13 19:26) [4]


    > А как тогда обеспечить их совместную корректную работу?

    Я не пробовал, не могу подсказать, посмотри на http://stackoverflow.com/ там есть масса вопросов по теме использования FastMem совместно с Dll. Вот например:
    http://stackoverflow.com/questions/17476683/how-to-configure-fastmm-to-detect-memory-leak-in-a-dll
  • harisma © (04.11.13 20:14) [6]
    Спасибо, посмотрю :)
 
Конференция "Основная" » Использование FastMM в качестве отлова утечек памяти [D5]
Есть новые Нет новых   [118234   +3][b:0][p:0.001]