ubuntu中使用eclipse调试libevent

前言

  通常我们在使用libevent时,是先把libevent编译成库,然后应用程序链接该库,但是这种方式下,调试
应用程序,单步是无法进入到libevent函数里面的。为此,我们换一种思路:直接将libevent源码当作
应用程序本身的代码进行编译,然后运行、调试。
  由于libevent源码中包含有跨平台的内容,例如在ubuntu下编译时需要排除掉与其它操作系统相关的的一些
源文件,而且,libevent自带的makefile在执行时还会根据当前系统生成event-config.h文件,这个文件中也
定义了一些与操作系统相关的宏开关。也就是说,仍然需要首先执行libevent自带的编译,得到的头文件组

才是我们需要的。


  下面描述一下具体步骤。

步骤

1. 首先使用libevent自带的编译方式进行编译
   tar -zvf libevent-2.0.21-stable.tar.gz
   ./configure --prefix=/usr/local/libevent
   
   /*****
   用Vim打开Makefile文件,跳转到792行.c.lo标签处,在其下方的命令中追加一条
   echo '$<' >> /tmp/compile_src
   如果直接输入提示非法的话,则复制一行其下方的注释行,在此基础上更改,注意前面tab键留空;
   这一行命令会把libevent自带的makefile最终仅编译了哪些文件输出到compile_src文件内,这样在
   后面eclipse项目中就可以根据这个文件移除那些不需要编译的文件。
   /*****
   
   make
   
   /*****
   注意:不要make install,因为我们不需要它生成的库
   /*****

2. 新建eclipse可执行文件工程
   import整个libevent-2.0.21-stable目录,过滤仅选中.h和.c文件类型。
   
   import之后,在工程Project Explorer中移除sample、test、WIN32-Code目录以及buffer_iocp.c 、epoll_sub.c、 evthread_win32.c、
   win32select.c 、event_iocp.c、 bufferevent_async.c 、kqueue.c 、evport.c。
   /*****
   由于本文是凭记忆总结的,因此移除了哪些文件可能列的不全,没关系,可以比照上述的compile_src文件进行移除。
   /*****
   
   重命名arc4random.c为arc4random.h,并将evutil_rand.c中有一句#include "arc4random.c"改为.h。
   
   设置工程属性:
   在Symbols中增加预定义宏HAVE_CONFIG_H
   在编译包含路径中增加
   /usr/local/ding_src/libevent-2.0.21-stable/compat和/usr/local/ding_src/libevent-2.0.21-stable/include
   /*****
   顺序不要颠倒
   /*****
   在链接库中增加crypt;pthread;rt;z
   
3. 从sample目录引入一个带main函数的测试文件,例如time-test.c

4. 编译。

到此,调试即可,单步可以进入到libevent源码内部了。

备忘:在编译的时候出现了一个undefine reference to TAILQ_END,非常奇怪,因为TAIL_FIRST就没问题,后来发现原来是
操作系统也定义了TAIL_FIRST,但是没定义TAILQ_END,编译的时候链接了操作系统的而不是libevent自己定义的queue.h。

路径中包含/usr/local/ding_src/libevent-2.0.21-stable/compat就可以了。


参照文章:https://blog.csdn.net/qyyouming/article/details/64131364

猜你喜欢

转载自blog.csdn.net/dyzhen/article/details/80622766