相关疑难解决方法(0)

用C或C++打印调用堆栈

有没有办法在每次调用某个函数时在C或C++中正在运行的进程中转储调用堆栈?我的想法是这样的:

void foo()
{
   print_stack_trace();

   // foo's body

   return
}
Run Code Online (Sandbox Code Playgroud)

其中的print_stack_trace工作方式类似于callerPerl.

或类似的东西:

int main (void)
{
    // will print out debug info every time foo() is called
    register_stack_trace_function(foo); 

    // etc...
}
Run Code Online (Sandbox Code Playgroud)

在哪里register_stack_trace_function放置某种内部断点,这将导致在调用时打印堆栈跟踪foo.

在某些标准C库中是否存在这样的事情?

我正在使用GCC在Linux上工作.


背景

我有一个测试运行,基于一些不应该影响此行为的命令行开关,行为不同.我的代码有一个伪随机数生成器,我假设它是基于这些开关被不同地调用的.我希望能够使用每组开关运行测试,并查看随机数生成器是否针对每个开关进行不同的调用.

c c++ linux callstack

98
推荐指数
8
解决办法
15万
查看次数

确定指针指向C的函数?

我有一个指向函数的指针,假设有任何签名.我有5个不同的功能和相同的签名.

在运行时,其中一个被分配给指针,并调用该函数.

如果不在这些函数中插入任何print语句,我怎样才能知道指针当前指向的函数名称?

c function-pointers

53
推荐指数
7
解决办法
4238
查看次数

将被调用的函数名称作为字符串

我想显示我正在调用的函数的名称.这是我的代码

void (*tabFtPtr [nbExo])(); // Array of function pointers
int i;
for (i = 0; i < nbExo; ++i)
{
    printf ("%d - %s", i, __function__);
}
Run Code Online (Sandbox Code Playgroud)

我用它__function__作为一个例子,因为它与我想要的非常接近,但我想显示指向的函数的名称tabFtPtr [nbExo].

谢谢你帮助我:)

c

23
推荐指数
1
解决办法
2万
查看次数

C++,获取函数的名称

在C++中,有没有办法从它的指针中获取函数签名/名称?

void test(float data) {}
cout << typeid(&test).name();
Run Code Online (Sandbox Code Playgroud)

我想使用这些数据进行日志记录.

c++ string function

15
推荐指数
2
解决办法
2万
查看次数

C++:在编译之前可以将函数指针追溯到原始函数而不查看函数名吗?

我想建立一个服务器,学生可以上传和运行课程代码.但是,我不希望它们访问各种功能,例如system(),这可能会导致对我的服务器的错误访问.我可以在预处理器输出中搜索显式函数调用,但是如果用户创建一个这样的函数指针:

int (*syst)(const char*) = system;
syst("rm *");
Run Code Online (Sandbox Code Playgroud)

我仍然对这种威胁持开放态度.但是,我不能只搜索字符串"system",例如,因为它是一个有效的名称 - 如果学生不包含cstdlib,他们可以使用该名称作为变量名.由于这是一个开始的编程课程,拥有十英里长的变量名称黑名单是一个坏主意.

有没有办法定义除名称以外的功能,并允许我在编译代码之前搜索其他名称?

c++

9
推荐指数
1
解决办法
163
查看次数

C是否具有函数参数名称的__func__功能?

"C"标准是否支持与__func__函数参数名称类似的东西?

c func

2
推荐指数
1
解决办法
4990
查看次数

如何将函数指针转换为函数名?

我现在有一系列具有相同功能的函数,

func_pointer_t func_array[] = {func_1, func_2, func_3, ...};
Run Code Online (Sandbox Code Playgroud)

我想开发一个遍历所有数组成员的程序,并将输出转储到另一个.dat数据文件.输出应具有以下格式:

func_1 func_1_output
func_2 func_2_output
func_3 func_3_output
...
Run Code Online (Sandbox Code Playgroud)

所以我的问题是 - 当遍历数组成员时,我们怎么能让程序知道函数指针指向哪个函数名(例如func_array [0]指向func_1)?

c++

1
推荐指数
1
解决办法
1912
查看次数

标签 统计

c ×4

c++ ×4

callstack ×1

func ×1

function ×1

function-pointers ×1

linux ×1

string ×1