If you throw an exception with a string then the message you throw is presented in QTP like any other script error (StopRetrySkipDebug)
throw "I'm sorry, Dave. I'm afraid I can't do that";
However from trying it out it looks like this only works with string literals, if you concatenate a literal with a variable it shows only the literal part:
throw "I'm sorry, Dave. I'm afraid I can't do " + param;
QTP displays:
I'm sorry, Dave. I'm afraid I can't do
When using a string variable:
var msg = "I'm sorry, Dave. I'm afraid I can't do " + param;
throw msg;
QTP displays (X's to protect the guilty):
An error occurred while running the Web extensibility handler for the 'Xxx' method
Error details:
File: c:\qtp\dat\extensibility\web\toolkits\xxx\xxx.js
Line: 51
Description: Exception thrown and not caught