我在apache 2.4上构建了一个共享模块。我可以让apache构建成功。在apache开始时,下面有一个转储:
if (r != NULL) ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r, "test");
我知道结构变量r是server_rec(apache struct)类型,下面是dbx中的值
(dbx) p *r
(process = 0x000000011001fa88, next = (nil), error_fname = "logs/error_log", error_log = 0x000000011001fa10, log = (module_levels = (nil), level = 4), module_config = 0x0000000110053420, lookup_defaults = 0x0000000110054ef8, defn_name = (nil), defn_line_number = 0, is_virtual = '\0', port = 0, server_scheme = (nil), server_admin = "you@example.com", server_hostname = "isi081.wdf.sap.corp", addrs = 0x000000011004e410, timeout = 60000000, keep_alive_timeout = 5000000, keep_alive_max = 100, keep_alive = 1, names = (nil), wild_names = (nil), path = (nil), pathlen = 0, limit_req_line = 8190, limit_req_fieldsize = 8190, limit_req_fields = 100, context = (nil))
我没有看到内存中有任何损坏。但仍然存在apache启动转储。 如果我注释掉这一行,那么一切都按预期工作。 Apache启动,我也能完成操作。但是我们需要这个语句才能启用日志记录。是否还有其他替代方案或修复方法。
相同的代码适用于其他平台,如linux,solaris和HP on apache 2.4。 另外在aix上使用apache 2.2相同的代码也可以。仅在apache 2.4上才会出现此问题。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
我认为你没有完全针对2.4标头进行编译,并且“ap_log_error”未被视为2.4中的宏。
此外,名为“r”的server_rec超级误导。 “r”传统上是request_rec。我无法相信它实际上并不是你问题的根源,也许是间接的。