驱动基本调试技巧
**
一, 堆栈打印
**
1,C++ 中堆栈打印
CallStack stack(LOG_TAG); 打印堆栈
头文件:#include <utils/CallStack.h>
CallStack *t =new CallStack("joymine_trace",1);
delete t;
原型:CallStack::CallStack(const char* logtag, int32_t ignoreDepth)
测试实例:
打印实例二:
01-01 08:00:05.337 332 3532 D joymine_trace: #00 pc 0000a393 /system/lib/libaudiopolicyenginedefault.so (android::audio_policy::Engine::getStrategyForUsage(audio_usage_t)+30)
01-01 08:00:05.337 332 3532 D joymine_trace: #01 pc 00017a6b /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::getDeviceForStrategy(android::routing_strategy, bool)+68)
01-01 08:00:05.337 332 3532 D joymine_trace: #02 pc 00014d3f /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::checkDeviceMuteStrategies(android::sp<android::AudioOutputDescriptor>, unsigned int, unsigned int)+94)
01-01 08:00:05.337 332 3532 D joymine_trace: #03 pc 000176dd /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::setOutputDevice(android::sp<android::AudioOutputDescriptor> const&, unsigned int, bool, int, int*, char const*)+292)
01-01 08:00:05.337 332 3532 D joymine_trace: #04 pc 000174e1 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::releaseAudioPatch(int, unsigned int)+124)
01-01 08:00:05.337 332 3532 D joymine_trace: #05 pc 00016c91 /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::clearAudioPatches(unsigned int)+68)
01-01 08:00:05.337 332 3532 D joymine_trace: #06 pc 00018d6f /system/lib/libaudiopolicymanagerdefault.so (android::AudioPolicyManager::releaseResourcesForUid(unsigned int)+6)
01-01 08:00:05.337 332 3532 D joymine_trace: #07 pc 000060f1 /system/lib/libaudiopolicyservice.so
2,HAL C
_Unwind_Backtrace()
3,Kernel C: dump_stack();
4,JAVA堆栈打印:
包:import android.util.Log;
…
方法:
StackTraceElement[] stackframes = Thread.currentThread().getStackTrace();
Log.e(“Stacktrace * gfx”, “*******BEGIN*****”);
For (int i=0; i < stackframes.length; i++)
{
Log.e(“Stacktrace * gfx”, stackframes[i].toString());
}
Log.e(“Stacktrace * gfx”, “********END******”);
**
二, tips
**
kernel & user space 的log交错打出来
adb shell ‘(logcat -v threadtime & cat /proc/kmsg)’ | tee userkernel.txt