FastMM, como fazer exibir a mensagem e gravar o arquivo?
Olá amigos, gostaria de saber como faço pra gravar um arquivo texto com o erro do FastMM, e que continua dando a mensagem pra mim, isto porque está dando erro e é muita coisa pra mim copiar...
Aproveito, alguém entende as mensagens dele!? É que não consegui entender muito bem, pra achar onde está o memory leak....
[]s
Aproveito, alguém entende as mensagens dele!? É que não consegui entender muito bem, pra achar onde está o memory leak....
[]s
Titanius
Curtidas 0
Respostas
Massuda
11/10/2006
Dê uma olhada no arquivo FastMM4Options.inc. Esse arquivo tem vários $define´s, todos explicados (em inglês). Os que podem ser interessantes para você estão na parte ´Debugging Options´ e na parte ´Memory Leak Reporting´. Lembre de restaurar os defaults quando for gerar a versão que vai para os clientes (debug/leak report prejudica bastante o desempenho do programa).
GOSTEI 0
Titanius
11/10/2006
Olá Massuda,
Consegui... valeu... o erro que está dando é este:
Como faço pra descobrir onde está o vazamento?
[]s
Consegui... valeu... o erro que está dando é este:
Essa aplicação teve vazamentos de memória. Os vazamentos dos blocos pequenos são (excluindo os vazamentos esperados registrados por ponteiro): 5 - 12 bytes: String x 12, Desconhecida x 1 13 - 20 bytes: String x 16, Desconhecida x 36 21 - 28 bytes: TJvBackgroundClientLink x 1, String x 25, Desconhecida x 6 29 - 36 bytes: String x 13, Desconhecida x 5 37 - 44 bytes: String x 1 45 - 60 bytes: TStringList x 1, String x 2 61 - 76 bytes: String x 2 77 - 92 bytes: String x 2 109 - 124 bytes: Desconhecida x 1 O tamanho dos vazamentos dos blocos médios e grandes são (excluindo os vazamentos esperados registrados por ponteiro): 3004 Nota: O detalhe do vazamento de memória está logado em um arquivo texto na mesma pasta que essa aplicação. Para desabilitar essa checagem de vazamento de memória, desabilite o DEFINE "EnableMemoryLeakReporting".
Como faço pra descobrir onde está o vazamento?
[]s
GOSTEI 0
Massuda
11/10/2006
5 - 12 bytes: String x 12, Desconhecida x 1
....
109 - 124 bytes: Desconhecida x 1
Esta parte te diz quantos leaks ´pequenos´ foram encontrados bem como qual o tamanho deles.O tamanho dos vazamentos dos blocos médios e grandes são (excluindo os vazamentos esperados registrados por ponteiro): 3004
Esta parte te diz qual o tamanho dos leaks ´grandes´.Nota: O detalhe do vazamento de memória está logado em um arquivo texto na mesma pasta que essa aplicação. Para desabilitar essa checagem de vazamento de memória, desabilite o DEFINE ´EnableMemoryLeakReporting´.
Como faço pra descobrir onde está o vazamento?
Deve ter sido gerado um arquivo na mesma pasta do seu programa e com mesmo nome do seu programa mas extensão diferentes. Os dados para localizar o leak estão nesse arquivo.GOSTEI 0
Titanius
11/10/2006
Valeu massuda,
realmente gera o arquivo, mas um monte de código asm nele... pow.. o cara tem q saber asm pra ver os leaks?!
Só um exemplo do código:
TEm um monte disso no arquivo.. :oops:
Descobrir onde é, que é complicado.. rsrs..
[]s
realmente gera o arquivo, mas um monte de código asm nele... pow.. o cara tem q saber asm pra ver os leaks?!
Só um exemplo do código:
Um bloco de memória vazou. O tamanho é: 36 Caminho da pilha quando esse bloco foi alocado (endereços de retorno): 40300E 40574D 405778 942ABB 77D2CCD1 [PostMessageA] 77D2CDAD [EnumWindows] 95D1D0 40529B 405303 O bloco está sendo usado por um objeto da classe: Desconhecida The allocation number is: 39473 Dump de memória atual de 256 bytes iniciando no endereço 160EE80: 01 00 00 00 15 00 00 00 44 69 72 65 63 74 44 42 4E 6F 74 69 66 79 57 6E 64 50 72 6F 63 00 E8 11 9F FE 80 80 80 80 80 80 00 00 00 00 10 BF 60 01 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 4E 9A 00 00 0E 30 40 00 4D 57 40 00 78 57 40 00 BB 2A 94 00 D1 CC D2 77 AD CD D2 77 D0 D1 95 00 9B 52 40 00 03 53 40 00 2A 30 40 00 94 BB 43 00 EF BB 43 00 63 D1 43 00 E3 D1 43 00 27 76 8F 00 4D 75 8F 00 4D 82 42 00 C0 82 42 00 1E 00 00 00 68 D1 60 01 AF EE 60 01 01 00 00 00 15 00 00 00 44 69 72 65 63 74 44 42 4E 6F 74 69 66 79 57 6E 64 50 72 6F 63 00 50 11 9F FE 80 80 80 80 80 80 00 00 00 00 10 BF 60 01 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 36 9A 00 00 0E 30 40 00 4D 57 40 00 78 57 40 00 BB 2A 94 00 D1 CC D2 77 AD CD D2 77 D0 D1 95 00 9B 52 40 00 03 53 40 00 . . . . . . . . D i r e c t D B N o t i f y W n d P r o c . è . Ÿ þ € € € € € € . . . . . ¿ ´ . . . . . . . . . ÿ ÿ ÿ ÿ . . . . N š . . . 0 @ . M W @ . x W @ . » * ” . Ñ Ì Ò w Í Ò w Ð Ñ • . › R @ . . S @ . * 0 @ . ” » C . ï » C . c Ñ C . ã Ñ C . ´ v . M u . M ‚ B . À ‚ B . . . . . h Ñ ´ . ¯ î ´ . . . . . . . . . D i r e c t D B N o t i f y W n d P r o c . P . Ÿ þ € € € € € € . . . . . ¿ ´ . . . . . . . . . ÿ ÿ ÿ ÿ . . . . 6 š . . . 0 @ . M W @ . x W @ . » * ” . Ñ Ì Ò w Í Ò w Ð Ñ • . › R @ . . S @ .
TEm um monte disso no arquivo.. :oops:
Descobrir onde é, que é complicado.. rsrs..
[]s
GOSTEI 0
Massuda
11/10/2006
Ainda bem que você postou um pedaço do arquivo, poqru eu não tinha nenhum que pudesse usar como exemplo.
Usando só endereços de retorno, você pode tentar localizar o problema usando Search|Find error.
Caminho da pilha quando esse bloco foi alocado...
Essa parte mostra onde o bloco ´leakado´ foi alocado. Para ter mais dados que os endereços de retorno, em Project|Options, na aba Compiler, habilite as opções relacionadas com Debugging e na aba Linker mude a opção Map File para Detailed.Usando só endereços de retorno, você pode tentar localizar o problema usando Search|Find error.
O bloco está sendo usado por um objeto da classe: Desconhecida
Quando possivel, o FastMM tenta determinar qual TAlgumaCoisa que foi ´leakado´.Dump de memória atual de 256 bytes iniciando no endereço 160EE80:
Isso mostra um dump de parte da área de memória que foi ´leakada´. Por exemplo, se fosse uma string que foi deixada para trás, provavelmente você veria o texto da string.GOSTEI 0
Titanius
11/10/2006
Valeu Massuda... agora deu pra ter uma idéia.. :D
[]s
[]s
GOSTEI 0