如何输出输入变量的名称

时间:2011-08-15 20:23:39

标签: c debugging variables printf

在编写程序时,我遇到了一些问题,我正在编写一些代码来调试它。我在程序中有很多链接,我相信其中一个问题是在链接中,所以我试着编写一个程序来输出无法链接的变量的名称。我的努力失败了,来到这里寻求帮助。这是我的代码:

GstElement element1, element2; //this is debugging a gstreamer program
void testforfailure(element1, element2)
{
   if(!gst_element_link(element1, element2))
   {
     printf("linkage of");
     printf(element1); //I want this to be the name of the element calling the function
     printf(" and ");
     printf(element2);
     printf(" failed.");
     return -1;
   }
}

示例电话:

GstElement *source, *sink;
testforfailure(source, sink); //if link(source, sink) fails, then this should output "linkage of source and sink failed"

如果有人能帮我解决这个问题,那就太棒了。

编辑:在看到不可能之后,我设计了一个简单的解决方案:

testsignalforfailure(GstElement *elem1, GstElement *elem2, int id, int id2)
{
  if(!gst_element_link(elem1, elem2))
  {
    g_print("linkage of %d and %d failed", id, id2);
    return -1;
  }
}

当使用“testsignalforfailure(source,sink,1,2)”调用时,这给了我无法链接的元素的唯一id(自定义)(我在运行之前向每个元素声明了一个id)。感谢大家的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用宏执行某些操作。说实话,我并不完全知道你想要什么,但你可以调试如下:

#define debug(x) printf(#x ": %s\n", x);
int main()
{
    char *a="foo", *b = "bar";
    debug(a);
    debug(b);
}

应该很容易根据您的需要进行调整。

答案 1 :(得分:1)

只是要明确:你有一个正在运行的程序。有时对特定功能的调用失败。

但是你不知道什么叫这个功能;因此,需要使用变量名称(?)。我不能为我的生活弄清楚你可能有什么其他目的来获得这些名字。

无法获取传入的变量名称,无论如何都不会真正告诉你任何事情。所以我建议您需要获取错误的调用堆栈以了解它的来源。坦率地说,这些“名称”只是开发人员和编译器的语法,除非包含调试符号,否则可能会改变它们。

更好的解决方案是在函数上设置断点并观察传递给它的所有内容。基本上,使用你的调试器。

答案 2 :(得分:0)

我想你想要打印出变量的字符串内容。

在您的代码段中,您使用print作为第一个参数,它必须是格式字符串。

这种做法一开始似乎没有问题,但如果您的变量包含格式转义字符'%',则printf()将查找更多参数,而您只提供一个参数,并导致程序崩溃。 / p>

尝试更改printf语句,如下所示:

printf(“%s和%s的链接失败。\ n”,element1,element2);