我在我的一个Objective-C项目中使用JavaScriptCore,我想随时知道当前文件和文件是什么?落入JS回调时的行。
使用public headers无法做到这一点,所以我查看了sources,似乎可以访问该文件&通过使用一些C ++代码来划线。
// ctx is a JSContextRef, that's the only type I have an access to
JSC::JSValue jsCtx = toJS(ctx);
CodeBlock* codeBlock = jsCtx->codeBlock();
// Line
unsigned sourceOffset = codeBlock->sourceOffset();
// Source URL
SourceProvider* sourceProvider = codeBlock->source();
const String& url = sourceProvider->url();
显然需要JSC
,JSValue
,CodeBlock
和SourceProvider
的定义。我把所有这些都放在单独的标题中,但它确实非常庞大。
答案 0 :(得分:0)
您可以从公共标题中了解此信息。你走了:
发生异常时,异常对象包含以下键:
line,sourceId,sourceURL,name,message
您可以访问这些键的值,以查找发生异常的文件(sourceURL)和行号(行)。
示例:
JSObjectRef exceptionObj = JSValueToObject(context, exception, NULL);
//Convert the exceptionObj into dictionary (I leave the implementation of this to you..)
NSDictionary *exceptionDict = [self convertJSObjectToDictionary:exceptionObj];
NSString *lineNumber = [exceptionDict objectForKey:@"line"];
NSString *fileName = [exceptionDict objectForKey:@"sourceURL"];
NSLog(@"Exception has occurred in file:%@ at line number:%@", fileName, lineNumber);
希望这有帮助!
~Sunil Phani Manne