【gdb】【list】第二行echo是什么意思

【gdb】【list】what does the second line of echo mean

当我在gdb中使用list *func+offset查看src时,echo的第二行让我很困惑,第304行和*rte_ring_create_elem+0x1cc有什么关系。

(gdb) l *rte_ring_create_elem+0x1cc
0x9f744 is in rte_ring_create_elem (src/lib/librte_ring/rte_ring.c:309).
304   src/lib/librte_ring/rte_ring.c: No such file or directory.

下面是带有行号的 dpdk src。

294         mz = rte_memzone_reserve_aligned(mz_name, ring_size, socket_id,
295                                          mz_flags, __alignof__(*r));
296         if (mz != NULL) {
297                 r = mz->addr;
298                 /* no need to check return value here, we already checked the
299                  * arguments above */
300                 rte_ring_init(r, name, requested_count, flags);
301 
302                 te->data = (void *) r;
303                 r->memzone = mz;
304 
305                 TAILQ_INSERT_TAIL(ring_list, te, next);
306         } else {
307                 r = NULL;
308                 RTE_LOG(ERR, RING, "Cannot reserve memory\n");
309                 rte_free(te);
310         }
311         rte_mcfg_tailq_write_unlock();

我已经尝试搜索答案了,但是list的使用指南都有了。

list * 命令在您指定的二进制文件中的地址周围(默认情况下)列出 10 行源代码。

在您的例子中,您指定了符号地址 rte_ring_create_elem+0x1cc,因此 gdb 有助于打印实际地址(0x9f744)并告诉您对应于 rte_ring.c 中的第 309 行。然后它会尝试显示周围的 10 行(第 304-313 行),但它找不到源文件,所以给出了您看到的错误。