gpt4 book ai didi

c++ - 如何编写调试宏以在 C++ 中打印函数(strace 样式)的所有参数?

转载 作者:行者123 更新时间:2023-11-30 05:38:06 24 4
gpt4 key购买 nike

给定任意函数

void f(int a, int b, char c) {


---macro here----

}

现在 DBG_ARGS 应该有类似的输出
f(a = 1, b = 2, c = A)

我们可以使用 VA_LIST#x__FUNCTION__ 来完成这个吗?

最佳答案

我不认为在一般情况下您可以单独使用直接宏来完成此操作,但您可以使用对另一个函数的调用来完成此操作。

如果您查看 manual page对于 backtrace,您会发现一个 glibc 特定例程来转储堆栈。如果您从当前函数 X 调用另一个函数 Y,并且该函数转储堆栈,则堆栈转储的第二行将是函数 X 的参数(确保编译器未内联该函数)。

遗憾的是,这种方法不是特别便携。 OS-X 和 Linux 有不同的 backtrace 类型实现,我相信 Windows 也有。

va_list-esque 宏仅适用于可变参数函数。您给出的示例不是可变参数函数。我不太清楚 VA_LIST(大写)的作用(可能是特定于编译器的),但谷歌表明它几乎相同。

关于c++ - 如何编写调试宏以在 C++ 中打印函数(strace 样式)的所有参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934620/

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