1、CameraService进程信息打印
adb shell dumpsys media.camera
CameraService Log等级修改
adb shell dumpsys media.camera -v 1
实现代码入口是:
//frameworks\native\cmds\dumpsys\main.cpp
int main(int argc, char* const argv[]) {
signal(SIGPIPE, SIG_IGN);
sp<IServiceManager> sm = defaultServiceManager();
fflush(stdout);
if (sm == nullptr) {
ALOGE("Unable to get default service manager!");
aerr << "dumpsys: Unable to get default service manager!" << endl;
return 20;
}
Dumpsys dumpsys(sm.get());
return dumpsys.main(argc, argv);
}
//frameworks\native\cmds\dumpsys\dumpsys.cpp
int Dumpsys::main(int argc, char* const argv[]) {
Vector<String16> services;
Vector<String16> args;
....
for (size_t i = 0; i < N; i++) {
String16 service_name = std::move(services[i]);
if (IsSkipped(skippedServices, service_name)) continue;
sp<IBinder> service = sm_->checkService(service_name);
if (service != nullptr) {
....
// dump blocks until completion, so spawn a thread..
std::thread dump_thread([=, remote_end { std::move(remote_end) }]() mutable {
int err = service->dump(remote_end.get(), args);
});
...
return 0;
}
进入CameraService
//frameworks\av\services\camera\libcameraservice\CameraService.cpp
status_t CameraService::dump(int fd, const Vector<String16>& args) {
...
dprintf(fd, "\n== Service global info: ==\n\n");
dprintf(fd, "Number of camera devices: %d\n", mNumberOfCameras);
dprintf(fd, "Number of normal camera devices: %d\n", mNumberOfNormalCameras);
String8 activeClientString = mActiveClientManager.toString();
dprintf(fd, "Active Camera Clients:\n%s", activeClientString.string());
dprintf(fd, "Allowed user IDs: %s\n", toString(mAllowedUsers).string());
...
}
2、查看camera所在进程及运行在那个cpu上
ps –e | grep camera
ps -eo pid,args,psr|grep camera//run on which processor .
3、kernel log抓取:
adb logcat -b kernel -v threadtime > kernel.log
adb shell cat dev/kmsg | find “3641”//pid
adb logcat -b all > log//userspace and kernel space log
//main and kernel log
adb logcat -c && adb logcat -G 256M && adb logcat -b main -b crash -b kernel > log.txt
4、java层打印堆栈:
try{
throw new Exception();
} catch(Throwable e){
Log.e("sgj","e.printStackTrace();");
e.printStackTrace();
}
5、执行截图命令:
adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png d:/screenshot.png
6、查看进程打开的文件:
adb shell lsof -p 685 >e:\log.txt
7、addr2line工具
addr2line -C -f -e newcdr 00026cb3
8、readelf工具
readelf libsxrapi.so -a >elf.txt
8、内存信息打印
adb shell dumpsys meminfo packagename
9、修改文件的读写权限
chmod 777 build.prop
10、patch添加
git apply –reject xx.patch
11、代码上传主干及分支
git push origin HEAD:refs/for/master
//上传分支
git push origin HEAD:refs/for/分支名
12、shell 脚本开关应用
adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity
adb shell am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity
adb shell am force-stop com.some.package
13、sharedpreference数据保存位置:
/data/data/<packagename>/shared_prefs/name of sharedPreference
14、CPP文件中开关log
打开ALOGV: #define LOG_NDEBUG 0
打开ALOGI:#define LOG_NIDEBUG 0
打开ALOGD:#define LOG_NDDEBUG 0
打开全部LOG:#undef NDEBUG
15、qcom HAL3 log开关
//打开等级为LEVEL: logInfoMask; GROUP: 0x80 即CamxLogGroupHAL LOG;
adb shell "echo logInfoMask=0x80 >> /vendor/etc/camera/camxoverridesettings.txt"
//打开所有chi log,bit 0 - error, bit 1 - warning, bit 2 - info, bit 3 - debug
adb shell "echo overrideLogLevels =15>> /vendor/etc/camera/camxoverridesettings.txt"
//CamxLogGroupHAL定义在vendor\qcom\proprietary\camx\src\utils\camxtypes.h
//CamxLogInfo定义在vendor\qcom\proprietary\camx\src\utils\camxtypes.h
//默认值定义在vendor\qcom\proprietary\camx\src\core\camxsettings.xml
//用户重载在camxoverridesettings.txt和camxoverridesettingsprivate.txt
16、qcom hal3 kernel log 开关
adb shell "echo 0x10 > /sys/module/cam_debug_util/parameters/debug_mdl"
17、
x = (m+n-1)&~(n-1)
意思是:
x=m/n*n+(m%n==0)?0:n;