We could detect if the simulation diverged. Then we had to replay deterministicly up to the frame of divergence and then break on various things that cause divergence. Floating point underflow/overflow, NaN, uninitialized memory access, divide by zero, etc. If my memory serves correct, the physx code referenced uninitialized memory. We had to patch their binary to initialize it.
Sounds like a potential GDC or Gamasutra writeup.