Speicherverbrauch meiner Anwendung feststellen



  • knivil schrieb:

    valgrind ist z.B. das Tool schlechthin (finde ich). Der Speicherverbrauch als auch leaks werden aber erst nach dem Beenden des Programms angezeigt.

    http://www.pic-upload.de/23.03.09/fgra5q.jpg



  • Naja, Cygwin und Co, wenns kein Port gibt. Gibt es anscheined nicht, Pech gehabt. Ausserdem: Nicht-betriebssytemspezifische Teile auslagern und irgendwo anders Testen. Oder eigenes new/delete bzw. malloc/free anbieten, dass die Aufrufe als auch die angeforderten Bytes protokolliert. Ist auch nicht schwer, da die eigentliche Aufrufe ja nur an die richtigen new/delete malloc/free weitergeleitet werden muessen.



  • knivil schrieb:

    Naja, Cygwin und Co, wenns kein Port gibt. Gibt es anscheined nicht, Pech gehabt. Ausserdem: Nicht-betriebssytemspezifische Teile auslagern und irgendwo anders Testen. Oder eigenes new/delete bzw. malloc/free anbieten, dass die Aufrufe als auch die angeforderten Bytes protokolliert. Ist auch nicht schwer, da die eigentliche Aufrufe ja nur an die richtigen new/delete malloc/free weitergeleitet werden muessen.

    Mich würde aber auch mal ein Tool interessieren, das hier genauere Angaben liefert und nativ auf win32 läuft. VC zeigt zwar die leaks beim beenden an ( mit dem richtigen SysCall), aber auch nicht immer.
    rya.


  • Mod



  • 😉


  • Mod

    Jochen Kalmbach schrieb:

    😉

    Da gibt's nix zu grinsen, wenn man gute Seiten empfiehlt... 🤡



  • knivil schrieb:

    Naja, Cygwin und Co, wenns kein Port gibt. Gibt es anscheined nicht, Pech gehabt.

    ne, glück gehabt. mit solch vorsinntflutlichem zeug sollen sich mal schön die unix-fans herumquälen.
    🙂



  • Martin Richter schrieb:

    http://www.codeproject.com/KB/applications/leakfinder.aspx

    Unterstützt kein MSVC2008 leider... und ich konnte auch keine Report erzeugen trotz offensichtlicher Leaks, die zum Test erzeugt wurden.
    rya.



  • Nimm die aktuelle Version von hier:
    http://blog.kalmbachnet.de/files/LeakFinder-RC8.zip



  • Jochen Kalmbach schrieb:

    Nimm die aktuelle Version von hier:
    http://blog.kalmbachnet.de/files/LeakFinder-RC8.zip

    Danke dir, Jochen.
    Ich hab ohne Anleitung ein wenig suchen müssen, hab jetzt aber folgenden code zur Verwendung:

    #ifdef NL_PLATFORM_WIN32
    int WINAPI WinMain( HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int nShowCmd )
    #else
    int main(int argc, char** arg)
    #endif
    {
        LeakFinderXmlOutput leak;   
        CApplication app;
        app.go(); // hier läuft das ganze programm.
        leak.ShowCallstack();
        return TRUE;
    }
    

    Ich bekomme jede Menge output und der wird auch in einer Datei gespeichert.
    Beim lesen der Datei stürzt das Programm aber ab:

    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.Xml.XmlException: Das 'MEMREPORT'-Anfangstag in Zeile '1' stimmt nicht mit dem Endtag von 'LEAK' überein. Zeile 7, Position 5.
    bei System.Xml.XmlTextReaderImpl.Throw(Exception e)
    bei System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
    bei System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag)
    bei System.Xml.XmlTextReaderImpl.ParseEndElement()
    bei System.Xml.XmlTextReaderImpl.ParseElementContent()
    bei System.Xml.XmlTextReaderImpl.Read()
    bei System.Xml.XmlTextReader.Read()
    bei MemLeakAnalyse.LeakFile.ReadXMLFile(String xmlFile)
    bei MemLeakAnalyse.Form1.button1_Click(Object sender, EventArgs e)
    bei MemLeakAnalyse.Form1.btnXMLFileSelect_Click(Object sender, EventArgs e)
    bei System.Windows.Forms.Control.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    bei System.Windows.Forms.Button.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3082 (QFE.050727-3000).
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
    ----------------------------------------
    MemLeakAnalyse
    Assembly-Version: 1.0.3138.18245.
    Win32-Version: 1.0.3138.18245.
    CodeBase: file:///C:/Dokumente%20und%20Einstellungen/****/Desktop/LeakFinder-RC8/MemLeakAnalyse/bin/Release/MemLeakAnalyse.exe.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3053 (netfxsp.050727-3000).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3053 (netfxsp.050727-3000).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3053 (netfxsp.050727-3000).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Xml
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3082 (QFE.050727-3000).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll.
    ----------------------------------------
    System.XML.resources
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3053 (netfxsp.050727-3000).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml.resources/2.0.0.0_de_b77a5c561934e089/System.Xml.resources.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3053 (netfxsp.050727-3000).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.3082 (QFE.050727-3000).
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
    Ausnahmen an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.

    Ich hoffe, ich habe es richtig verwendet :).
    rya.


Anmelden zum Antworten