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

时间:2015-10-04 14:36:08

标签: c++ debugging macros variadic-functions

给出像

这样的功能
toString

现在void f(int a, int b, char c) { ---macro here---- } 应该有类似的输出 DBG_ARGS

我们可以使用f(a = 1, b = 2, c = A)VA_LIST#x来完成此任务吗?

1 个答案:

答案 0 :(得分:1)

在一般情况下,我认为你不能单独用直接宏来做这件事,但你可以通过调用另一个函数来做到这一点。

如果查看backtrace的{​​{3}},您将找到一个特定于glibc的例程来转储堆栈。如果从当前函数X调用另一个函数Y,并且该函数转储堆栈,那么堆栈转储的第二行将是函数X的参数(确保编译器没有内联函数)。

可悲的是,这种方法不是特别便携。 OS-X和Linux有不同的backtrace类型实现,我确信Windows也是如此。

va_list - esque宏仅适用于可变参数函数。您提供的示例不是可变参数函数。我并不完全清楚VA_LIST(大写)是什么(也许是编译器特定的),但谷歌暗示它几乎是一样的。