Advanced POSE Techniques
Thus far I have given you an overview of the basics of POSE, including how to create, load, and save sessions, as well as how to run your program in a POSE session. These features alone make POSE an indispensable tool for observing and demonstrating your program running under a wide variety of Palm OS devices and configurations.
The remainder of this chapter delves deeper into some advanced POSE features that are instrumental in testing and debugging your application. We also take a look at some advanced configuration options that can be used for specific types of Palm applications.
POSE Warnings and Error Messages
POSE can produce a significantly greater amount of warnings and error messages than you would ever see running your program on an actual device, especially if you choose to run POSE with a debug ROM (again, highly recommended).
Although initially annoying, these messages should not be dismissed. The messages are POSE's way of telling you that there is either a bug in your program, or that you have used a programming technique that might not be supported in future versions of the Palm operating system. Pay attention to POSE, it is trying to help you!
To get an understanding of the types of messages POSE produces, right-click on POSE and choose Debug Options. A screen will appear that lists the various types of program checking that can be enabled or disabled. You can disable some or all of the options to suppress most of the errors that POSE is displaying. Occasionally this is called for in order to have a cleaner debugging session, or when perhaps you are demonstrating a pre-release version of your program to a customer.
Under normal POSE operation, however, it is highly recommended that you leave the debug options checked, and that you set some time aside to investigate what part of your code is causing the error conditions to trigger. A quick look at the POSE User Guide (installed under the Docs directory in your POSE folder) yields a detailed description of each debug option, and most of the options are designed to catch true error conditions in your program. Certain specialized applications (such as games or imaging programs) that need to write to screen memory may require turning off the Screen Access option, but most of the others will indicate that you have a legitimate problem in your code that needs attention.
POSE offers a built-in logging facility that you can use to see into the inner workings of your program without resorting to a source-level debugger. Although the current version of POSE does not yet support the ability to automatically log your own program's internal function calls, POSE's logging facility can log system calls, serial port activity, and a number of other types of events that might otherwise be hard to track.
A good example of a program that can benefit from logging is a TCP/IP-based application that performs NetLib calls. Such programs are not always easy to debug using the normal CodeWarrior tools. Oftentimes all you need is to be able to see a log of the types of networking calls occurring and in what order they do so.
In short, you should have an idea of what you are looking for before turning on all of the logging options. A tremendous number of events can be generated in a very short period of time, which can obscure your ability to find what you are looking for (to say nothing of the performance impact you will have on POSE as it attempts to log all of the events).
Profiling is a technique used by some software developers to try to determine what parts of their program code are using the most processing time. Although profiling is not a tool that you will need on a daily basis, it can often be just the trick for peering into the inner workings of your code.
POSE offers a special profiling version of POSE (called "Emulator-Profile.exe "), which you can use to report on the execution of your code. As with logging, it is best to know what you are looking for, rather than simply profiling your entire POSE session.
POSE does offer some control over when to start and when to stop profiling, thus helping you zero in on a certain user action or part of your program's execution.
The results of your profile session are saved in your POSE directory in a text file, along with a measurement of how long POSE spent in each function.
One important note is that you must be compiling your program with debugging enabled (see your compiler manual for how to enable this) in order for POSE to produce readable output with real function names.
TCP/IP and Serial Communications Support
If you are developing an application that uses the Palm OS NetLib TCP/IP library, you will be pleased to know that POSE can help you test your networking code as well. POSE can actually be set up to redirect any TCP/IP calls you make to the TCP/IP stack that is provided on your PC.
Similarly, if your application performs serial communications using the Palm OS Serial Manager, POSE can be configured to map the Palm OS serial port to one of the available serial ports on your host computer.
POSE supports a special automated testing facility called Gremlins. Just like the gremlins of legend that sought to perform evil mischief with airplanes, POSE Gremlins are used to put your application through what might be considered the "worst-case-user" scenario.
For the reader not familiar with the concept of automated testing, these tools present the opportunity to randomly throw events such as button presses, stylus taps, text entry, and application switching at your program. A log of how your program stood up under this test is recorded, allowing you to review and debug any problems encountered.
For software developers, the thought of an end user exercising every possible menu, button, or user interface element in their application over and over thousands of times is terrifyingand that is just what the POSE Gremlins feature does!
Before you run away in fright, abandoning the thought of ever running Gremlins on your application, consider the following:
Gremlins is probably the most efficient way to flush out hard-to-find instances of bad memory handling and questionable use of Palm OS function calls.
Would you rather have POSE tell you about problems in your code now, or would you rather hear it from your customers?
Passing a certain level of Gremlins testing is a required step in order for a software product to bear the Palm certification logo.
With these thoughts in mind, the next chapter will focus on debugging tools and techniques for Palm OS applications. As part of the chapter, the Gremlins facility is discussed in more depth, and an actual Gremlins session is performed as an example.