比如在frameworks/native/services/surfaceflinger/Layer.cpp中,想在其中某个方法中加调用栈打印,可以按如下步骤操作:
1) 在surfaceflinger模块的Android.bp文件中添加对libutilscallstack库的引用:
cc_defaults {
name: "surfaceflinger_defaults",
......
}
cc_defaults {
name: "libsurfaceflinger_defaults",
defaults: ["surfaceflinger_defaults"],
......
shared_libs: [
......
// tmp add for debug
"libutilscallstack"
],
......
}
2)在Layer.cpp中先include CallStack.h头文件,然后在需要打印调用栈的地方创建一个CallStack对象即可。
......
// tmp add for debug
#include <utils/CallStack.h>
namespace android {
void Layer::onFirstRef() {
// cx add
CallStack stack(LOG_TAG);
.....
}
} // namespace android
3)使用mm命令编译surfaceflinger模块, 编译完成后替换生成的libsurfaceflinger.so到system/lib或system/lib64目录下即可。
上述方法在androidP上依然有效。