未记录的API&头

时间:2013-05-18 03:11:57

标签: c++ objective-c header webkit javascriptcore

我在我的一个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();

显然需要JSCJSValueCodeBlockSourceProvider的定义。我把所有这些都放在单独的标题中,但它确实非常庞大。

  • 我应该直接包含这些标题吗?
  • 如果这些文件需要其他标题怎么办?我可能会因为我不会使用多个标题而结束。
  • 让我们忘记内部源代码可能会改变:我想做什么甚至可能?

1 个答案:

答案 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