如何快速查找C语言代码中的宏的值

http://blog.csdn.net/learnrose/article/details/6223269


  很多的系统,代码量超大,在我们阅读其代码的时候,往往macro能决定代码执行的具体分支。利用find grep查找起来会特别慢,而且不一定能找到正确的值。如果系统是可编译的,可以利用编译器的预处理功能很快知道宏的具体值。

 

方法如下:

 

在CFLAGS里面添加 -E 选项。

 

举例说明:

在Android 系统里面,

 

 

1. 在Andriod.mk里面添加-E 参数。
LOCAL_CFLAGS += -E 

2.重新编译,显示其过程

mm showcommands

3.编译过程会打印出类似下面的结果。

prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc  -I hardware/ttd/marvell/generic/bmm-lib/lib   -I out/target/product/OMS_TTD/obj/SHARED_LIBRARIES/libbmm_intermediates   -I system/core/include   -I hardware/libhardware/include   -I hardware/libhardware_legacy/include   -I hardware/ril/include   -I dalvik/libnativehelper/include   -I frameworks/base/include   -I frameworks/base/opengl/include   -I external/skia/include   -I out/target/product/OMS_TTD/obj/include   -I bionic/libc/arch-arm/include   -I bionic/libc/include   -I bionic/libstdc++/include   -I bionic/libc/kernel/common   -I bionic/libc/kernel/arch-arm   -I bionic/libm/include   -I bionic/libm/include/arch/arm   -I bionic/libthread_db/include  -c  -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -DNDEBUG -g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -DLOG_DISABLEDEBUG=1 -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64   -E      -MD -o out/target/product/OMS_TTD/obj/SHARED_LIBRARIES/libbmm_intermediates/bmm_lib.o hardware/ttd/marvell/generic/bmm-lib/lib/bmm_lib.c

其中-o 是生成的文件。
打开这个文件,就是我们预编译的结果,可以很清晰地看到各个宏的具体值。

你可能感兴趣的:(如何快速查找C语言代码中的宏的值)