【问题标题】:Logging pointer's values on Android native code在 Android 本机代码上记录指针的值
【发布时间】:2010-12-11 15:33:37
【问题描述】:

我正在使用本机代码开发一个 Android 应用程序。

我不知道如何调试共享库,所以我决定从指向 LogCat 的指针记录值。

我有这个 C++ 代码:

extern GLfloat* vertPos;

// More code here:
...

int i = 0;
for(i = 0; i < numVertices; i++)
{
      __android_log_print(ANDROID_LOG_VERBOSE, "initRendering-Vertices", "%d, %f", i, vertPos[i]);
}

numVertices 等于 2472 个元素。

我在 LogCat 得到了类似的东西:

12-11 08:17:35.354: VERBOSE/initRendering-Vertices(900): i = 614, value = 3.246999
12-11 08:17:35.354: VERBOSE/initRendering-Vertices(900): i = 924, value = -8.000200

我丢失了 310 个元素。

还有其他方法可以查看所有指针的元素吗?

谢谢。

【问题讨论】:

  • 这怎么可能?为什么不将标准输出加入到 logcat 输出中,并尝试直接在标准输出上打印大量日志?
  • 因为我是 Android 开发的新手,我不知道该怎么做。
  • 这不会改善问题。要么直接写入日志设备,要么写入标准输出并让 VM 中的线程从标准输出读取,然后写入日志设备。

标签: debugging logging android-ndk


【解决方案1】:

Android 日志实现在内核中使用 64KB 循环缓冲区。如果您设法将数据写入日志的速度快于“logcat”可以读出的速度,那么您将开始丢失行。由于 logcat 必须等待 adb 通过 USB 将输出发送到您的工作站,所以要超越它并不难。

使用 fopen 创建一个名为 /sdcard/debug.txt 的文件,将 __android_log_print() 更改为 fprintf(),然后在运行完成后“adb pull”关闭输出。这将确保不会丢失任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2011-10-24
    • 2016-02-29
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多