没有在Samsung Tizen TV模拟器中获得正确的日志

时间:2016-06-15 06:46:24

标签: tizen samsung-smart-tv tizen-emulator tizen-sdk

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

例如,我从这里拿了样本App for 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模拟器时遇到类似的问题?有什么方法可以解决它吗?

1 个答案:

答案 0 :(得分: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)); });
}

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

希望这有帮助。