gpt4 book ai didi

c - dladdr() 出现问题的宏

转载 作者:行者123 更新时间:2023-11-30 14:30:51 26 4
gpt4 key购买 nike

我已经使用 gcc 的 -finstrument-functions 选项和以下(简化的)代码实现了跟踪行为:

void __cyg_profile_func_enter(void *this_fn, void *call_site)
{
Dl_info di;
if(dladdr(this_fn, &di))
printf("entered %s\n", (di.dli_sname?di_dli_sname:"<unknown>"));
}

这非常有效,除了一件事:宏也会被处理,但是该函数会打印包含宏的函数的信息。

因此包含宏的函数会多次打印其信息(这当然是不希望的)。

有什么东西可以检测宏正在被处理吗?或者是否可以完全关闭检测宏?

PS sizeof() 也会出现同样的问题

编辑:澄清一下:我正在寻找一种解决方案来防止宏与检测函数混淆(它们不应该这样做)。不适用于跟踪宏、函数和/或其他事物的方法。

最佳答案

宏由预处理器内联扩展,因此无法区分直接从代码调用的函数和从宏调用的函数。

解决这个问题的唯一可能的方法是让您的宏设置一个全局标志,您的跟踪函数将检查该标志。这当然不是万无一失的,因为从宏调用的函数完成的任何调用也将以相同的方式出现。

关于c - dladdr() 出现问题的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com