有没有办法在运行时访问调试符号?

jdi*_*zle 3 c runtime debug-symbols

这是一些示例代码,用于了解我想要的内容.

int regular_function(void)
{
     int x,y,z;
     /** do some stuff **/
     my_api_call();
     return x;
}
...
void my_api_call(void)
{
    char* caller = get_caller_file();
    int line = get_caller_line();
    printf("I was called from %s:%d\n", caller, line);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现get_caller_file()get_caller_line()?我见过/使用技巧,例如#define荷兰国际集团my_api_call作为一个函数调用传入__FILE____LINE__宏.我想知道是否有办法在运行时而不是编译时访问该信息(假设它存在)?像Valgrind这样的东西是不是必须做这样的事情才能获得它返回的信息?

qrd*_*rdl 5

如果已使用调试符号编译二进制文件,则可以使用特殊库访问它,例如用于DWARF调试格式的libdwarf.