dav*_*off 6 c apache debugging dlopen
我在我正在编写的Apache模块中使用dlopen(),这样我就可以为我的模块安装一个插件系统.我发现,如果我编译我的模块,编译我的插件,并启动Apache,一切都工作很好.
但是,如果在完成所有这些操作之后,我重新编译了我的插件,(对插件代码进行了一些或两次更改),我的下一页加载将导致Apache出现段错误.每个后续请求再次正常工作.因此,只有在编译后立即加载第一页导致段错误.
我一直试图解决这个问题几天(我在C调试方面表现不佳)今天,我在apache错误日志中注意到了这一点:
Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
Run Code Online (Sandbox Code Playgroud)
任何人都知道发生了什么事吗?这是否意味着它不是我的代码而且我一直在寻找幻影错误?我相信每次调用dlopen()都会调用dlcose().但是,当我在单进程模式下运行apache并开始快速刷新页面时,似乎会发生这种特殊的bug/segfault.
一些想法:
可能你再打电话dlopen()一次?dl库维护其递增每个引用计数器dlopen(),以便dlclose()将卸载库只如果计数器== 0.
你有没有指定RTLD_NODELETE标志dlopen()(假设你在Linux上)?如果是,dlclose()则不会卸载您的库.
您是否尝试使用调试系统调用strace?启动Apache,找到它的pid并通过调用跟踪Apache没有的所有系统调用strace -p<pid>.可能它会让你知道发生了什么.
| 归档时间: |
|
| 查看次数: |
4891 次 |
| 最近记录: |