簡體   English   中英

gdb從哪里獲得函數名?

[英]Where does gdb get function names from?

我正在使用GDB查看實時python進程,並查看以下框架:

...
#5  call_function (oparg=<optimized out>, pp_stack=0x7fffb1b2ffa0) at Python/ceval.c:4084
#6  PyEval_EvalFrameEx (f=f@entry=0x1a03850, throwflag=throwflag@entry=0) at Python/ceval.c:2679
...

我對call_function從何而來感到困惑。 在python可執行文件或二進制文件中,它似乎都不是符號:

~  ᐅ objdump -x /usr/lib/libpython3.3m.so.1.0 | grep call_function
000000000005f0e0 l     F .text  0000000000000094              call_function_tail

如果它不是已知的符號,那么GDB如何知道它……它的確切含義(當然,這是正常功能)?

它在Python解釋器的源代碼中,您的gdb指出了位置,但是您可以在此處檢查它,盡管在另一行:3971。

函數的定義是:

static PyObject * call_function(PyObject ***pp_stack, int oparg);

由於它是一個static函數,因此具有內部鏈接,因此在其編譯單元之外將不可見,更不用說其動態庫(.so文件)了。

調試器知道它是因為它可以某種方式訪問​​正在運行的代碼的調試信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM