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

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

(gdb) frame #0 ap_get_client_block (r=0x8560d48, buffer=0xb68501b7 "SMS101SMSMsgFilterReq13925237429abc圲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 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行没有任何循环,但是他们重复了。 愿有人开导我吗?

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

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