Reliability and portability of parallel programs can be seriously affected by erroneous nondeterministic behavior of such programs. In message passing parallel programs, nondeterminism is caused by races among messages. However, some of these races may be intentional--introduced either for programming convenience, or for performance reasons. Testing and debugging such nondeterministic programs requires a significantly different approach than testing and debugging sequential programs. We present a strategy for testing and debugging message passing parallel programs, called a One-Thread-at-One-Time (OtOt) strategy, which requires a user to concentrate primarily on a single process in a testing and debugging session. The OtOt strategy can be implemented at run-time using a Controlled Execution technique. This implementation is shown to provide a debugging technique for nondeterministic message passing programs. Moreover, with an OtOt strategy, it is possible to define and implement parallel debugger actions that have similar semantics to that of common sequential debugger commands (e.g., break point, step, etc.). A testing methodology, also based on Controlled Execution, is developed for nondeterministic programs. A specification technique for intentional race conditions, called Message Expressions, is presented as a mechanism for directing the testing and debugging tools. A run-time parallel testing and debugging tool, called mdb, implements the OtOt strategy for programs written for PVM 3.x environment.