我在Apache post_config handler中有这种奇怪的行为:

int setup_module(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,server_rec *s)
{
    //1
    my_config_t *config =  ap_get_module_config(s->module_config, &my_module);

    //2
    log_me(config->logfp, apr_psprintf(ptemp, "My module version %s\n", MY_VERSION));

    //3
    log_me(config->logfp, "Starting the batch job");

    return OK;
}

log me是在另一个文件中声明并在头中声明的自定义函数(在编译时解析)。
在步骤2中,我可以看到config有一个有效值,但是步骤3在SEGSEGV上失败,如果我尝试调试它,我可以看到:
//步骤2
gdb:打印配置
$1=(我的配置)0x7a8098
//步骤3
gdb:打印配置
无法访问地址0x38处的内存

最佳答案

有东西正在覆盖配置指针。您能在内存位置设置一个断点并查看执行覆盖的是什么吗?以下是如何执行此操作的指南:
http://www.technochakra.com/debugging-types-of-data-breakpoints-in-gdb/

09-11 13:13