gdb,为什么“下一步”显示每个源代码行两次?

时间:2012-07-20 09:15:24

标签: c++ c gdb

每个人,当在gdb中使用“next”指令时,我发现每行源代码显示两次-----我很确定,这些代码不在任何循环中。这是现象:

(gdb) frame
#0  ap_get_client_block (r=0x8560d48, 
    buffer=0xb68501b7 "<?xml version=\"1.0\" encoding=\"utf-8\"?><Root><OperCode>SMS101</OperCode><AppId>SMSMsgFilterReq</AppId><Req><UserMobile>13925237429</UserMobile><SendMsg>abc圲34¨圲23a露07\214圲21¢<237朲11?东215圲10°<214朲27¥応227露07\214正常,hao"..., bufsiz=81920) at http_filters.c:1540
1540        if (r->remaining < 0 || (!r->read_chunked && r->remaining == 0)) {
(gdb) n
1544        bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
(gdb) 
1545        if (bb == NULL) {
(gdb) 
1544        bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
(gdb) 
1545        if (bb == NULL) {

-----第1544,1545行没有任何循环,但是他们重复了。 愿任何人开导我吗?

1 个答案:

答案 0 :(得分:14)

编译时你有什么级别的优化?

即使是最低级别的优化也可能导致调试器像疯狂一样跳转到源代码行,因为编译器内联,重新排序并且通常会使用代码。