2013-12-10 19 views
1

我正在创建一个通过js-ctypes机制调用Linux共享库的Firefox扩展。我希望我的扩展通过调用共享库中的函数在标准终端上显示调试信息,然后调用printf()在终端上显示调试字符串。可以打开一个linux共享库,显示和printf到终端?

但是,我的应用程序没有终端。那么,我的共享库可以打开,显示和printf()来显示这些消息吗?

是的,我知道内置的错误和浏览器窗口。但出于难以理解的原因,我想在终端窗口中发送我的调试消息。

那么,我的共享库如何打开并显示终端到printf()?

回答

1
  • 既然你是在Linux上,无论如何,在命令行运行Firefox时,它会打印一些东西stdout(或者是它stderr)了。 MAC上也一样。 Windows可能需要-console switch。您通过js-ctypes加载的库只能使用printf()和/或fprintf(stderr,...)。我似乎记得在过去开发js-ctypes的时候自己使用printf
  • 您还可以在JS代码中使用dump。这将只会转储到终端,而不是浏览器控制台。
  • 最后,Components.utils.reportError使您能够将任意消息打印到全局浏览器控制台(以前称为错误控制台)。 Cu.reportError基本上是shortcut to nsIConsoleService,它也会生成适当的位置信息。
+0

在我的扩展的顶部,javascript程序是这行:var econsole = Components.classes [“@ mozilla.org/consoleservice;1”]。getService(Components.interfaces.nsIConsoleService);':::然后,我的扩展程序中的所有打印语句如下所示:'econsole.logStringMessage(“funcname():variable =”+ variable);':::这将打印到错误控制台和浏览器控制台。这是不是你提到的,或者相同? – honestann

+0

另外,即使'about:config'显示browser.dom.window.dump,'dump(string);'和'window.dump(string);'也不会向错误控制台或浏览器控制台输出任何内容。启用'是'true'。但是我所有的'econsole.logStringMessage()'都会输出到错误控制台和浏览器控制台。嗯。 – honestann

+0

'Cu.reportError'使用'nsIConsoleService',但当传递错误和异常时会生成链接源的正确错误消息。 'dump'只能打印到终端控制台(如果stdout/sterr被附加到程序中,例如从命令行运行)。 – nmaier

0

您应该创建一个连接到命名管道并读取数据的简单服务器,然后将其打印到标准输出。它只是一个连接到管道(如文件)的简单程序,并从中读取。

您可以使用mkfifo来创建命名管道,并且您的JavaScript应用程序可以写入它,就像您将一个文件一样。

一个相关的问题是在这里:How to send a simple string between two programs using pipes?

您可以使用命令行工具mkfifo,或使用标准的C函数。