Beim Spielen mit verschiedenen Algorithmen in Haskell passiert es mir oft, dass ich ein Programm mit einem Speicherleck erstelle, wie es oft bei fauler Auswertung passiert. Das Programm, das die gesamte Erinnerung aufnimmt, macht nicht wirklich Spaß, ich habe oft Schwierigkeiten, es zu töten, wenn ich es zu spät erkenne.
Bei Verwendung von GHC6 hatte ich einfach export GHCRTS='-M384m'
in meinem .bashrc
. In GHC7 wurde jedoch eine Sicherheitsmaßnahme hinzugefügt, die fehlschlägt, wenn ein Programm mit -rtsopts
kompiliert wird wenn es eine RTS-Option entweder in einem Befehlszeilenargument oder in GHCRTS
erhält. Leider werden fast keine Haskell-Programme mit diesem Flag kompiliert. Wenn Sie also diese Variable setzen, wird alles gescheitert (wie ich in nach dem Upgrade auf GHC7 festgestellt habe, Alle Programme schlagen plötzlich fehl und sagen: "Die meisten RTS-Optionen sind deaktiviert. Verknüpfen Sie sie mit -rtsopts, um sie zu aktivieren." ).
Irgendwelche Ideen, wie man GHCRTS
mit GHC7 nutzen kann, oder eine andere praktische Möglichkeit, wie ich verhindern kann, dass meine Programme den gesamten Speicher belegen?
Sie können Ihre eigenen Programme mit -with-rtsopts=-M384m
kompilieren, um RTS-Optionen zur Kompilierzeit (ein für allemal) zu setzen. Sie könnten auch eine "Blacklist" von Programmen einrichten, die nicht mit GHCRTS
in Ihrem .bashrc
ausgeführt werden sollten; vielleicht so etwas wie
Tags und Links haskell memory-leaks ghc