
Hello, I'm currently hacking away a wxhaskell program that uses up 100% CPU even when it should be idle. So, rather than doing blind guesswork, I've thought about using profiling to spot the zealous function. I do not need a very accurate result, though. ghc with -prof -auto(-all) produces the following error message, however: "Could not find module `Graphics.UI.WX': Perhaps you haven't installed the profiling libraries for package wx-0.10.1? Use -v to see a list of the files searched for." So, I guess I need to rebuild wx with profiling, but I'm not sure how to do that exactly; <search engine> and the Wiki did not turn up any pointers, and there are no ready-made options to build wx with profiling. It seems Cabal can build a library with profiling automatically, but I don't think there exists a Cabalized version of wx yet. That, and I'm not sure if recompiling libraries to add profiling is a great idea, as wx itself may depend on other external libraries. So, is there a better way than profiling in my case, or am I missing something obvious here? Thanks! Anthony

On 20-mei-2007, at 17:39, Anthony Chaumas-Pellet wrote:
Hello,
I'm currently hacking away a wxhaskell program that uses up 100% CPU even when it should be idle. So, rather than doing blind guesswork, I've thought about using profiling to spot the zealous function. I do not need a very accurate result, though.
ghc with -prof -auto(-all) produces the following error message, however: "Could not find module `Graphics.UI.WX': Perhaps you haven't installed the profiling libraries for package wx-0.10.1? Use -v to see a list of the files searched for."
So, I guess I need to rebuild wx with profiling, but I'm not sure how to do that exactly; <search engine> and the Wiki did not turn up any pointers, and there are no ready-made options to build wx with profiling. It seems Cabal can build a library with profiling automatically, but I don't think there exists a Cabalized version of wx yet.
That, and I'm not sure if recompiling libraries to add profiling is a great idea, as wx itself may depend on other external libraries. So, is there a better way than profiling in my case, or am I missing something obvious here?
You are not missing anything obvious. The process is in fact somewhat tricky. What you have to do is the following: - compile wxHaskell with profiling (by editing the makefiles to include the -prof -auto-all argument to GHC) - *install* the profiled wxHaskell - manually move the profiled object libraries to ones including the _p string before the .a, e.g. move /usr/local/wxhaskell/lib/libwx.a to /usr/local/wxhaskell/lib/libwx_p.a - manually move the profiled .hi files to .p_hi files, e.g. move /usr/local/wxhaskell/lib/imports/Graphics/UI/WX.hi to /usr/local/wxhaskell/lib/imports/Graphics/UI/WX.p_hi - compile wxHaskell without profiling - install the non-profiled wxHaskell - enjoy the ability to use wxHaskell in both profiled and unprofiled versions Note: this assumes you are on a Unix-like system. I have no clue how to do this on Windows, but I'm told it is similar. Oh, and this is tested and works. The external libraries that wx relies on are either truly external, as in called through the FFI, or GHC standard libs that normally already have a profiling version available. With regards, Arthur van Leeuwen. -- /\ / | arthurvl@cs.uu.nl | Work like you don't need the money /__\ / | A friend is someone with whom | Love like you have never been hurt / \/__ | you can dare to be yourself | Dance like there's nobody watching

You are not missing anything obvious. The process is in fact somewhat tricky. What you have to do is the following <snip>
Thanks! I've followed your instructions and got a profiler-enabled binary up and running. I'd figured out how to modify the Makefile (silly me searching for *G*HC), but I had no idea about the manual renaming of files. Anthony

Just in case anyone was wondering how to do this with the other major Haskell GUI lib Gtk2Hs... ./configure --enable-profiling some day when Gtk2Hs is cabalised it'll be even easier. Duncan On Sun, 2007-05-20 at 17:39 +0200, Anthony Chaumas-Pellet wrote:
Hello,
I'm currently hacking away a wxhaskell program that uses up 100% CPU even when it should be idle. So, rather than doing blind guesswork, I've thought about using profiling to spot the zealous function. I do not need a very accurate result, though.
ghc with -prof -auto(-all) produces the following error message, however: "Could not find module `Graphics.UI.WX': Perhaps you haven't installed the profiling libraries for package wx-0.10.1? Use -v to see a list of the files searched for."
So, I guess I need to rebuild wx with profiling, but I'm not sure how to do that exactly; <search engine> and the Wiki did not turn up any pointers, and there are no ready-made options to build wx with profiling. It seems Cabal can build a library with profiling automatically, but I don't think there exists a Cabalized version of wx yet.
That, and I'm not sure if recompiling libraries to add profiling is a great idea, as wx itself may depend on other external libraries. So, is there a better way than profiling in my case, or am I missing something obvious here?
participants (3)
-
Anthony Chaumas-Pellet
-
Arthur van Leeuwen
-
Duncan Coutts