Toon posts:

[C/C++] Hoe windows "Handle"-lekken aan te pakken?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo iedereen,

Wij hebben hier een Windows Service (in C/C++, niet MFC) programma (van extern, met code) welke blijkbaar een handle-leak heeft. Met PerfMon zien we de handle count langzaam maar zeker oplopen (geen memory leak). Helaas is het niet direct 1:1 te relateren aan het soort activiteiten welke deze applicatie uitvoert, waardoor het erg lastig is om de veroorzaker te tackelen. Aangezien dit in principe voor weken/maanden moet kunnen draaien hebben we een probleem.

Met ProcessExplorer (van SysInternals) zien we dat het File Handles betreft, maar dit kunnen geen echte files zijn omdat dit maar 1-malig gedaan wordt (configuratie-file). Ook file handles mbt IPC is eigenlijk uitgesloten omdat dit niet gebruikt wordt.

Mogelijk dat ProcessExplorer een vertaal/interpretatie fout maakt? Geen idee...
Ikzelf heb met ProcessExplorer eens zelf uitgevonden dat ik een timer-handle leak had, dus hier had hij het bij rechte eind.

Mijn vragen nu zijn:
- Zijn er andere programma's waarmee meer details mbt gebruikte handles van een process kunnen worden opgevraagd?
- Wat kunnen die "file handles" nog meer zijn afgezien van 'echte' files en IPC?
- Andere suggesties hoe dit probleem te tackelen?

Thanks!

[ Voor 7% gewijzigd door Verwijderd op 08-05-2007 10:54 ]


Verwijderd

Volgens mij vraagt ProcessExplorer gewoon de handlecount op van het OS... En het OS maakt geen fouten daarin, per definitie...
Men zal dus wel ergens een CloseHandle() oid vergeten zijn.

Files kunnen verder van alles zijn. Zie hier voor een lijstje: http://msdn2.microsoft.com/en-us/library/ms724211.aspx
Maar in bijna alle gevallen worden die door CreateFile() geopend: http://msdn2.microsoft.com/en-us/library/aa363858.aspx
Dus je zou om te beginnen misschien kunnen zoeken naar CreateFile, en dan voor iedere handle die je tegenkomt de bijbehorende CloseHandle() zien te vinden?
En misschien daarna eens kijken naar CreatePipe() of CreateMailslot() of wat voor gerelateerde meuk je ook kunt vinden daar in de MSDN.

[ Voor 4% gewijzigd door Verwijderd op 08-05-2007 10:13 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

(MOD REQ: zou je de topic regel kunnen aanpassen door [C/C++] toe te voegen?)
Kun je dat soort aanvragen in het vervolg middels een topic report ( Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/icon_hand.gif ) doen? Dan zijn we er namelijk wat sneller bij. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 07:20

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gebruik Microsoft's Application Verifier eens, wellicht dat je daar een hoop info uit kunt destilleren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • reddog33hummer
  • Registratie: Oktober 2001
  • Laatst online: 03-08 23:13

reddog33hummer

Dat schept mogelijkheden

Mischien ook handig van sysinternals:
http://www.microsoft.com/.../FileAndDisk/Filemon.mspx

Hiermee kan je kijken, welke file open blijft staan.

Backup not found (R)etry (A)bort (P)anic<br\>AMD 3400+ 64, 2 GB DDR, 1,5 TB Raid5


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 28-11 09:35

leuk_he

1. Controleer de kabel!

En wellicht dat (dure) tools als boundchecker of purify nog kunnen aangeven waar de lekken optreden.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
De nieuwe sysinternals tool is Process Explorer. Verder is er nog ETW als low-level debug optie beschikbaar.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1