Get or specify the error reporting mechanism for an application.
Syntax
JSErrorReporter JS_GetErrorReporter(JSRuntime *rt); JSErrorReporter JS_SetErrorReporter(JSRuntime *rt, JSErrorReporter er);
Name | Type | Description |
---|---|---|
cx |
JSRuntime * |
Pointer to a JS runtime whose errors should be reported via your function. |
er |
JSErrorReporter |
The user-defined error reporting function to use in your application, described below. |
Callback Syntax
typedef void (* JSErrorReporter)(JSContext *cx, const char *message, JSErrorReport *report);
Name | Type | Description |
---|---|---|
cx |
JSContext * |
The context in which the error happened. |
message |
const char * |
An error message. |
report |
JSErrorReport * |
An error report record containing additional details about the error. |
Description
JS_SetErrorReporter
enables you to define and use your own error reporting mechanism in your applications. The reporter you define is automatically passed a JSErrorReport
structure when an error occurs and has been parsed by JS_ReportError
. JS_SetErrorReporter
JS_GetErrorReporter
returns the value set by JS_SetErrorReporter
.
Typically, the error reporting mechanism you define should log the error where appropriate (such as to a log file), and display an error to the user of your application. The error you log and display can make use of the information passed about the error condition in the JSErrorReport
structure.
The error reporter callback must not reenter the JSAPI. Like all other SpiderMonkey callbacks, the error reporter callback must not throw a C++ exception.
Note that JS_SetErrorReporter has no facility to directly pass a user data pointer to the error reporting function. You can work around this by using the JS_SetRuntimePrivate and JS_GetRuntimePrivate methods. Example code with error handling omitted:
class MyRequest { public: void execute() { auto rt = JS_NewRuntime(memlimit); JS_SetRuntimePrivate(rt, this); JS_SetErrorReporter(rt, &MyRequest::dispatchError); // execute JS } void onError(const std::string& error) { // handle error } static void dispatchError( JSContext* ctx, const char* message, JSErrorReport* report) { auto rt = JS_GetRuntime(ctx); auto rt_userdata = JS_GetRuntimePrivate(rt); if (rt_userdata) { auto req = static_cast<MyRequest*>(rt_userdata); req->onError(message); } } };
See Also
- MXR ID Search for
JS_GetErrorReporter
- MXR ID Search for
JS_SetErrorReporter
- bug 1277278 - JS_SetErrorReporter is renamed to JS::SetWarningReporter