0
我在gdb会话中启动了Apache http server(版本2.4.12)。我踩着通过request.c模块中的代码,我打印出变量的内容这个内存地址包含什么?
这是代码
1546 AP_DECLARE(int) ap_file_walk(request_rec *r)
1547 {
1548 ap_conf_vector_t *now_merged = NULL;
1549 core_dir_config *dconf = ap_get_core_module_config(r->per_dir_config);
1550 ap_conf_vector_t **sec_ent = NULL;
1551 int num_sec = 0;
这是* R的输出,我感兴趣的是:
used_path_info = 2,
eos_sent = 0,
per_dir_config = 0x7fffe4251028,
request_config = 0x7fffe4258370,
log = 0x7ffff7fc1288,
log_id = 0x0,
这是我所得到的,当我检查per_dir_config
(gdb) print 0x7fffe4251028
$99 = 140737021022248
(gdb) x/s 0x7fffe4251028
0x7fffe4251028: "\370\022%\344\377\177"
(gdb)
会这样meone有时间向我解释"\370\022%\344\377\177"
是什么?
'r-> per_dir_config'是指向'ap_conf_vector_t'结构的指针。你得到的字符串是内容(部分,也许)。 – 2015-02-24 20:04:16
它是一个由7个字符组成的序列,其中包括''\ 370',''\ 022','''',''\ 344',''\ 377',''\ 177 '',''\ 0''(终止的空字符是隐含的)。 GDB主要以八进制格式向你展示它们。这是最好的GDB能够做到的:当你通过地址直接访问内存时,它对数据类型一无所知。 – 2015-02-24 22:48:30
为什么不直接使用print r-> per_dir_config? – dbrank0 2015-02-25 07:48:21