Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

Android调试.so库常用工具

Android调试.so库常用工具

readelf显示目标ELF文件的信息,比如信赖库,头信息,段信息等。addr2line用户进程崩溃时内核会记录一些基本的调试信息,如果进程执行的ELF文件包含调试符号,就可以通过addr2line找到源文件中哪一行出问题。我在调试Android的VM崩溃问题时使用到了这个工具(详细过程参考这里http://www.linuxidc.com/Linux/2011-05/35782.htm)nm列出目标文件的符号清单,当没有输入文件名时,默认为a.out。s...
Webkit如何绑定JS引擎

Webkit如何绑定JS引擎

有两种方式可以控制在WebCore中使用哪个JS引擎。1、设置JS_ENGINE变量。有两个值:jsc,v8。这是最方便的方式2、如果JS_ENGINE变量没有设置,或者设置的值不是jsc,v8其中的一个的话,这个makefile会选择一个默认的引擎进行编译。对于默认引擎的选择,主要取决于两个变量ARCH_ARM_HAVE_VFP(是否支持VFP)和USE_ALT_JS_ENGINE(与安装buildbot有关,这里不考虑,略过)。如果ARCH_ARM_H...
打开Android系统中的JNI调试

打开Android系统中的JNI调试

VM启动时需要一些启动参数,包含标准参数和非标准参数。这里涉及到两个标准参数:-Xcheck:jni和-verbose:jni。这两个参数都设置的话,JNI调用路径就可以由dalvikvm打印出来,并通过logcat看到。可以在下面这个文件中控制是否为VM添加这两个启动参数。/frameworks/base/core/jni/AndroidRuntime.cpp先看一下第一个代码片段property_get("dalvik.vm.checkjni", pr...
在Android源码的JavaScriptCore引擎中添加LOG

在Android源码的JavaScriptCore引擎中添加LOG

在源码中添加LOG的话,使用下面的两种方式<cutils/log.h>或<utils/Log.h>using namespace Android;然后再Android.mk中添加liblog就可以了。在调试Webkit中的JavaScriptCore时,发现有些.cpp文件使用上面这两种方式时,编译可以通过,但LOGW等方法打印不出来。搜索了一下,发现一篇文章提到了另外的方法,稍做更改后,试了一下,问题解决。1、按文章提到的添加头文...
Java教程:JVM启动参数

Java教程:JVM启动参数

java启动参数共分为三类;其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;标准参数中比较有用的:verbose -verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断...
Java -verbose命令

Java -verbose命令

java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息。1.java -verbose:class在程序运行的时候究竟会有多少类被加载呢,一个简单程序会加载上百个类的!你可以用verbose:class来监视,在命令行输入java -verbose:class XXX (XXX为程序名)你会在控制台看到加载的类的情况。verbose和verbose:class含义相同,输出虚拟机装入的类的信息,显示的信息格式如下: [Lo...
在Android的源码中添加LOG

在Android的源码中添加LOG

想在Opencore代码中添加打印信息,但是使用OpenCore自带的PVLOGGER,有一定的局限,因为只能在创建对象调用相应的ThreadLogon()后才能使用。所以不能实现在任何函数中添加。于是通过添加Log.h的方法来添加。首先转下别人的经验我试了下还是出先undefined reference to `__Android_log_write"错误1:在编译so文件的c或cpp文件之前中加入以下代码,就可以在android中的log显示日志内容 ...
Linux 2.6.32的内核栈和用户空间栈关系

Linux 2.6.32的内核栈和用户空间栈关系

1.进程的堆栈内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。2.进程用户栈和内核栈的切换当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈转到内核栈。进程陷入内核...
Linux编译链接问题----静态库和动态库

Linux编译链接问题----静态库和动态库

1. Linux静态库和动态库的命名规则:静态函数库:静态库的名字一般是libxxx.a,利用静态库编译生成的文件比较大,因为整个静态库所有的数据都会被整合进目标代码中。a) 优点:编译后,可执行文件不需要外部支持;b) 缺点:生成的可执行程序大;静态库改变了,就需要重新编译可执行程序。动态函数库:动态库的名字一般是libxxx.so,相对于静态库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用函数库里面相应的函数,因此使用...
Linux 2.6 内核软中断(softirq)执行分析

Linux 2.6 内核软中断(softirq)执行分析

今天无意中看了眼 Linux 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),能说改动非常大。连 softirq 的调用点都不相同了,以前是三个调用点,今天搜索了一下原始码,发目前多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应该不算是系统中的调用点。ksoftirqd 返回去调用 do_...
Linux进程控制--STRACE:追踪信号和系统调用

Linux进程控制--STRACE:追踪信号和系统调用

在传统的UNIX系统上,判断一个进程实际正在做什么相当困难,用户只有根据从文件系统以及ps这样的工具取得的间接数据和经验来推测,而在Linux中,用户可以通过strace命令直接观察一个进程,进程的每一次系统调用,每接收到一个信号,这个命令都能显示出来。用户还可以把strace附在一个正在执行的进程上,监视一会儿该进程,再从进程上脱离,整个过程都不会影响那个进程。[root@www.linuxidc.com ~]# strace topexecve("/u...
Linux驱动工程师成长之路

Linux驱动工程师成长之路

本人此刻还不是什么驱动工程师,连入门都谈不上,但我坚信在未来的3-5年我肯定能成为我想像中的人,因为我马上就要进入这一行工作了。写下这个日志来记录我是怎么最后成为我想像中的人才的,呵呵。《Linux驱动工程师》这个东西是我在大二的时候看到有一篇讲如何学习嵌入式的,点击这里下载PDF,里面讲到嵌入式分为四层:硬件,驱动,系统,应用程序;还说linux驱动最难然后工资也最高就冲着他这句话我就决定我大学毕业的时候要去做这个linux驱动工程师,随后我就先后买了5...
Linux平台创建多个进程的方法

Linux平台创建多个进程的方法

自己第一次写创建多个进程的程序时不加思索地用循环,类似如下,for(i=0; i<3; i++){pid =fork();if(pid==0){child_process();}}结果运行之后的结果很奇怪,因为父进程创建出来的子进程又会创建子进程,所以像一棵树一样创建下去,而不是所有子进程皆以主进程为父亲!正确的方法应该是像引文中一样,如下;法一#include<stdio.h> #include<stdlib.h> #inc...
<< 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 >>