在编写程序时,我遇到了一些问题,我正在编写一些代码来调试它。我在程序中有很多链接,我相信其中一个问题是在链接中,所以我试着编写一个程序来输出无法链接的变量的名称。我的努力失败了,来到这里寻求帮助。这是我的代码:
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)。感谢大家的帮助。
答案 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);