StateThreads高级调试—StateThreads调试
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
在前面《StateThreads调试环境搭建》里,我们虽然可以断点调试 loopupdns
了,但是由于 clion 无法解析 StateThreads 的 Makefile
的代码,所以在 clion 里面并没有函数定义跳转,也无法使用 find usage
等功能。
没有这些功能会阻碍我们阅读源码的速度,所以本文就来讲解一下如何修改 Makefile
文件,让 clion 能够解析它。
根据我的经验,要让 clion 支持,就尽量不要在 Makefile
里面用 变量,特别是那些 shell 命令返回的变量,所以我对 Makefile
做了以下修改。
#增加这行代码到开头
OS = LINUX
TARGETDIR = $(OS)_$(shell uname -r)_$(BUILD)
改为
TARGETDIR = Linux_DBG
all: $(ST_ALL)
改为
ST_ALL = $(TARGETDIR) $(LIBRARIES) $(HEADER) $(EXAMPLES) $(DESC)
#增加下面的代码
../Linux_DBG/libst.a: $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
$(RANLIB) $@
rm -f obj; $(LN) $(LNFLAGS) $(TARGETDIR) obj
../Linux_DBG/st.h: public.h
rm -f $@
cp public.h $@
修改后的 Makefile
可以在 GitHub 进行下载。
然后我们删除 st-1.9
目录下的 .idea
隐藏目录,清除一下 clion 的缓存,然后再重新打开 clion,会发现能解析 Makefile
了,如下:
然后因为 lookupdns.c
里面用到了 obj
目录下的 st.h
文件,所以你需要在命令行执行 make all
,一些函数跳转才会正常。
因为只有执行了 make all
才会生成 obj
目录