The HangRx.exe debugging tool can help you resolve thread priority issues created by Hopper – but does little to empower you to quickly identify issues resulting from Virtual Memory (or the lack thereof). Most Windows Mobile users are already aware that VM is a rare resource and certain programming practices can introduce stability problems as a direct result of running out of VM.
In response, I have created a new logging tool called MemoRx.exe (“Memory Doctor”) that will graphically snapshot VM vitals so issues and problems can be easily and quickly identified visually. This new tool gathers the current state of VM on your device and logs a file to \windows\memoRx.txt (or \release\memoRx.txt if you are connected with KITL) where it can be easily viewed. It should be said that this log is intended to alert the user to any potential problems and does not provide detailed information or solutions to potential VM conflicts. The intent is to allow the user to quickly glance at the report and know if VM is a likely culprit – detailed investigation still requires other memory tools such as devhealth.exe and mi full.
The following sample, abbreviated output from the MemoRx.txt log:
Note how each executable has a slot along the X axis that shows graphically shows VM usage with ASCII type. When a new application is loaded, a new column will be generated and the report will grow in width – up to 32 processes. At the top, the tilde “~” characters represent DLL space that is shared amongst all executables in Slot 0. Below, the dot “.” characters represent VM memory based at 0x0 + VM Base and include stacks, code and heaps. Please note how the dot “.” changes into a pound “#” to flag a conflict between application VM and DLL VM space – this situation can result in an eventual exception and should be investigated.
This tool is being uploaded to the Power Toys section on Jetstream and is appropriate for both Smartphone and PPC platforms. You can run this program either from a storage card or directly from the user store – or you can use the focusApp post below to automate running this tool continually during your Hopper runs to give you a visual clue to VM status on exit.
This is the first of several posts I will focus on Virtual Memory and the common issues our customers have. So keep checking back and thanks for supporting your HoppeRx blog!
I have read all the post here, and have some question...
"1. determining all dlls used by device.exe and placing them in modules (slot1/fised); "
Q: How can we do it? I cann't find any help on google and MSDN...Would you mind giving us a URL?
Is MemoRx source available (possibly as Open Source) to allow for customization and further enhancements ?
Is Dll low address fixed? or variant?
Can you post the source or have MIPS/X86 build? thanks in advance
We been writing our own version of Memorx and the results we receive being quite close to MemoRX findings are not the same on several processess.
I am sure there are several others in the mobile development community who are doing the same and have the same question as I do...
Could you provide more details on how the "highest address" of allocated VM is computed for each process?
Heap Walking provides quite a bit of details but my upper memory address on several processes does not match with what Memorx reports. It would suggest an error in our computations, but where?
Could you please help me to know, how to use powertoy - nkDebugx?
It just a DLL, and i can't find help document to use it ,thanks!
I encountered a problem. I hope you can help explain. Thanks in advacne. According to memorx.exe debug message, the windows media player always is overflow when it plays a local file. But the device runs properly. No abnormal things happen. Is this a potential problem? Or it is a bug of Memorx.exe.
Many OEM’s have already noticed that Memory Doctor doesn’t correctly represent VM overlap in pre-release
There did have some problem ,when use the MemoRx.exe to check VM when use WMPLAYER.EXE in WM6.0.There will always show "#".But the VM is fine when you use devhealth.exe to check the device.
You really know what you are talking about and can explain things really well.
Should Hopper be run on apps with a GUI? When I run hopper on my device I get access violations with devhealth.exe which is getting launched by hopper. This app does not have a GUI so I was curious if Hopper can be run on apps with GUI only.