2013-05-18 42 views
1

我在我的一个Objective-C项目中使用了JavaScriptCore,并且我想随时知道什么是当前文件&当陷入JS回调。没有记录的API和标题

没有办法与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(); 

它显然需要的JSCJSValueCodeBlock,并且SourceProvider的定义。我把所有这些放在单独的标题中,但它确实很庞大。

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

回答

0

您可以从公共标题本身知道这些信息。在这里你去:

当异常发生时,异常对象包含以下键:

线的sourceID,sourceURL,名称,消息

您可以访问值,这些键在其中找到文件(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

+0

感谢Sunil,但我想随时获得堆栈跟踪,不仅在发生异常之后。所以当一个本地C函数被绑定到JS上下文中并且调用了这个函数时,我想知道什么时候调用了它。 –

+0

我明白你的意思了。 –