【问题标题】:can a linux shared library open, display and printf to terminal?linux 共享库可以打开、显示和 printf 到终端吗?
【发布时间】:2013-12-10 23:03:49
【问题描述】:

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

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

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

那么,我的共享库如何打开并显示一个终端以 printf() 进入?

【问题讨论】:

    标签: javascript linux terminal firefox-addon 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,它也会生成适当的位置信息。

    【讨论】:

    • 在我的扩展 javascript 程序的顶部是这一行:var econsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);::: 然后我的扩展程序中的所有打印语句看起来像这样:econsole.logStringMessage("funcname() : variable = " + variable);::: 这打印到两者错误控制台和浏览器控制台。这是不如你提到的,还是一样?
    • 另外,奇怪的是 dump(string);window.dump(string); 没有向错误控制台或浏览器控制台输出任何内容,即使 about:config 显示 browser.dom.window.dump.enabledtrue。但是我所有的econsole.logStringMessage() 都会输出到错误控制台和浏览器控制台。嗯。
    • Cu.reportError 使用nsIConsoleService,但在传递错误和异常时会生成链接源的正确错误消息。 dump 只会打印到终端控制台(如果 stdout/sterr 附加到程序,例如从命令行运行时)。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2023-03-30
      • 2014-10-23
      • 1970-01-01
      相关资源
      最近更新 更多