【问题标题】:Shell sessions and debug printf under vxWorks 6.9vxWorks 6.9下的shell会话和调试printf
【发布时间】:2018-05-14 12:00:09
【问题描述】:

我正在运行一个在启动脚本中启动的 vxWorks C 应用程序。一切运行良好,除了在启动时脚本启动我的软件后,每当我远程连接到嵌入式 telnet 服务器时,我都看不到我的软件的 printf 调试跟踪。

当我在提示符下手动运行软件时,我可以在我的 telnet 会话中看到调试跟踪。

我认为这与 SHELL_MAX_SESSIONS 内核选项设置为 -1(无限制)这一事实有关,所以我猜默认为串行线路的初始会话不会显示新的调试跟踪远程登录会话。我试图将 SHELL_MAX_SESSIONS 选项设置为 1,但我失去了 telnet 会话。 2个会话给了我同样的问题。

我想知道是否有办法在每个打开的会话中集中或重定向所有 stdio 输出?

我正在运行 vxWorks 6.9。

感谢您的帮助

【问题讨论】:

  • 应用程序是否过早退出?您是在应用程序启动或启动后连接到 telnet 服务器吗?然后日志应该在引导日志中。
  • 应用程序不会提前退出。我在应用程序启动后(因此在启动后)连接到 telnet 服务器。

标签: c vxworks


【解决方案1】:

我在使用 VxWorks 6.7 时遇到过类似的问题(从我的同事那里我知道 6.9 的行为方式相同)。

我的解决方案(虽然不是很好)是在我的程序中创建一个函数,它将所有任务的 stdout 和 stderr 重定向到当前(调用)任务(例如当前 telnet 会话)的 stdout 和 stderr。

查看ioLib的函数ioTaskStdGetioTaskStdSet

【讨论】:

  • 您好,感谢您的反馈。我可能需要使用 ioGlobalStdSet。您还记得您是如何检索 telnet 会话文件描述符的吗?
  • 当通过 telnet 执行一个函数时,它会自动在 telnet 的“stdout 上下文”中运行。这意味着执行“ioGlobalStdSet(.., ioTaskStdGet(taskIdSelf(), ..)”就可以了。
  • 在我的脚本末尾添加以下代码可以解决问题:ioGlobalStdSet( 1, ioTaskStdGet(0,1) ); ioGlobalStdSet( 2, ioTaskStdGet(0,1) ); 感谢您的帮助
【解决方案2】:

如果您想将所有任务的输出重定向到当前登录 shell,请参阅 https://stackoverflow.com/a/52749183/10481046

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多