1

我正在使用 IDE 2.4.0_Rev5 在 Tizen TV 模拟器上开发和运行我的应用程序。我面临的问题是许多已放入 javascript 文件的日志(使用console.log('xyz'))在运行应用程序时或即使我启动调试器时也不会出现在控制台中,但是有些日志来吧。

例如,我从这里获取了 AV Player 的示例应用程序: https ://github.com/Samsung/TizenTVApps/tree/master/TVDemoAvPlayer

当我运行应用程序时,我按下播放按钮,我只得到以下日志:

js/main.js (218) :Buffering Complete, Can play now!
js/main.js (66) :PLAYPAUSE
js/main.js (149) :Player.play(undefined)

但是,如果您查看该文件,则有许多日志没有出现,例如:

console.log('Main.onLoad()');    
console.log('Player.init('+id+')');
console.log('Player.prepare('+url+')');

如果您查看代码,可以肯定控件将到达这些点(我还通过进行一些修改来验证-更改 url 等并生效),因此对于这些日志没有出现并没有任何意义表示我错过了一些设置/配置,或者 SDK/模拟器存在一些重大问题。

有没有人在使用 Tizen TV 模拟器时遇到过类似的问题?有什么办法可以解决吗?

4

1 回答 1

2

你没有做错什么。我一开始就在同样的问题上苦苦挣扎。不幸的是,三星设置调试环境的方式,在控制台窗口准备好之前就输出了一些日志。我们为此找到了一些解决方案。如果您在模拟器或实际电视上进行调试,它们都可以工作。

这个最简单的解决方案是location.reload()在您的应用程序启动后在控制台中输入。将在不重新启动调试器的情况下重新启动应用程序。这样,您将能够查看所有日志。请注意,我们在重新加载后看到了一些奇怪的行为,所以不要依赖它来进行正确的调试。但从头开始查看日志仍然是一种有效的“快速而肮脏”的方法。

下一个解决方案是编写一些代码来覆盖console.log()以缓存消息。然后您可以从控制台调用一个函数来播放消息。像这样的东西将保留最后 200 条日志行,并允许您通过调用来输出它们dumpLog()。(下面的示例代码依赖于lodash。)

var proxiedLog = console.log;
var logCache = [];

console.log = function() {
  logCache.push(_.join(arguments, ", "));
  _.drop(logCache, logCache.length - 200);
  return proxiedLog.apply(this, arguments);
}

function dumpLog() {
   _.forEach(logCache, function(entry) { console.debug(JSON.stringify(entry)); });
}

但是最好的方法,我鼓励您在发布到生产环境之前进行设置的方法,就是将该信息发送到为您缓存日志的后端服务。您可以使用与上述类似的设置,您只需要将输出也发送到您的服务器。请务必包含一些唯一标识符,以便您可以区分来自不同设备的日志。

希望这可以帮助。

于 2016-06-15T20:54:58.853 回答