我有一个指向函数的指针,假设有任何签名.我有5个不同的功能和相同的签名.
在运行时,其中一个被分配给指针,并调用该函数.
如果不在这些函数中插入任何print语句,我怎样才能知道指针当前指向的函数名称?
程序用gcc编译但不用g ++编译,我只生成目标文件.
这是prog.c:
#include "prog.h"
static struct clnt_ops tcp_nb_ops = {4};
Run Code Online (Sandbox Code Playgroud)
这是prog.h:
#ifndef _PROG_
#define _PROG_
#include <rpc/rpc.h>
#endif
Run Code Online (Sandbox Code Playgroud)
当我做:
gcc -c prog.c
Run Code Online (Sandbox Code Playgroud)
这会生成目标代码,但是,
g++ -c prog.c
Run Code Online (Sandbox Code Playgroud)
给出错误:
variable ‘clnt_ops tcp_nb_ops’ has initializer but incomplete type
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
如何知道链接到二进制可执行文件的调试符号文件的名称和/或路径?
假设你是这样的:
objcopy --only-keep-debug foo foo.dbg
objcopy --strip-debug foo
objcopy --add-gnu-debuglink=foo.dbg foo
Run Code Online (Sandbox Code Playgroud)
现在foo.dbg有调试符号,foo只有gdb可以使用的foo.dbg链接.由于gdb可以从foo知道符号文件,如何在不实际运行gdb的情况下知道相同的内容?
我观察到即使我将可执行文件从foo重命名为xyz仍然gdb从foo.dbg加载符号,所以它不像binaryname.extension,并且扩展是可选的.
我想在我的程序在gdb下执行时,
在执行任何代码行之前检查行是否有特定的单词示例宏名称或变量名称或任何特定单词,如果有,则停止执行.
如果可以使用正则表达式完成更好.
我知道有一个命令rbreak或者rb在匹配函数名称上设置断点,这不是我想要的.
那有可能吗?
在C中,我想为我希望它发生的所有函数添加一个名称空间前缀字符串(不带引号),然后在任何时候轻松更改名称空间字符串.
我的方法:
#define NAMESPACE project_name
void NAMESPACE_func_name()
{
}
That should become:
void project_name_func_name()
{
}
Run Code Online (Sandbox Code Playgroud)
这可能吗,怎么样?提前感谢您的帮助.