Getting a full Thread Dump on Android

在android系统上面可以通过/data/anr/traces.txt看到全部线程的调用堆栈。

如何让系统生成?用SIGQUIT信号。

一篇博客,讲让系统抓取调用堆栈的方法。

上面的文章说了,有些设备不能直接用kill -3 pid,解决方法是添加个不停调用sleep的线程,设置断点,在IDE中设置断点,执行下面语句。

android.os.Process.sendSignal(android.os.Process.myPid(), android.os.Process.SIGNAL_QUIT)

如果是本机代码,可以在检测出来问题时候调用kill(getpid(), SIGQUIT)。

 

gcc compilation error value too large for defined data type

vmware中通过hgfs共享的源码,用gcc编译时候报告错误。

Value too large for defined data type。

用stat命令检查源码文件,发现源码的inode值比较大,举例281474980977064。

原因是,vmware中运行的操作系统是64位的,hgfs的inode值需要64位整数才能够保存,运行的gcc是32位的,调用stat失败。解决方法有下面几种。

  • 可以把vmware中运行的操作系统换成32位。
  • 可以把编译器换成64位。
  • 可以在虚拟机内部编译代码。