2011-08-15 41 views
-2

在編寫程序時,我遇到了一些問題,因爲我正在編寫一些代碼來進行調試。我在程序中有很多鏈接,我相信其中一個問題出現在鏈接中,所以我試圖編寫一個程序來輸出未能鏈接的變量的名稱。我的努力失敗了,來到這裏尋求幫助。這裏是我的代碼:如何輸出輸入變量的名稱

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(源,水槽,1,2)」,這給我的唯一的ID(自定義)未能鏈接的元素(我在運行之前向每個元素聲明瞭一個id)。感謝大家的幫助。

+3

變量在傳遞給函數之前的名稱?那是不可能的...... – GBa

+3

你是什麼意思的「鏈接」? – pmg

+3

老實說,**很難說出這裏要問什麼。這個問題含糊不清,含糊不清,不完整,過於寬泛,或修辭,並且不能以其目前的形式合理地回答。** –

回答

1

只是要清楚:你有一個正在運行的程序。有時調用某個函數失敗。

但是,您不知道什麼是調用該函數;因此需要使用變量名稱(?)。我不能爲了我的生活找出你想要獲得這些名字的其他目的。

不可能得到傳入變量的名稱,無論如何也不會告訴你任何事情。所以我建議你需要獲取錯誤的調用堆棧以知道這是從哪裏來的。坦率地說,這些「名稱」只是開發人員和編譯器的語法,除非包含調試符號,否則可能會改變它們。

更好的解決方案是在函數上設置一個斷點並觀察傳入的所有內容。基本上,使用你的調試器。

1

你可以用宏做一些事情。說實話,我並不確切地知道你想要什麼,但你可以調試如下:

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

它應該很容易適應這個您的需要。

+0

哇!你真的明白OP的要求嗎?! –

+0

我只是猜... – glglgl

+0

我不知道爲什麼我被低估了,但現在它變成了一個可運行的例子,並清除了一些錯誤。 – glglgl

0

我想你想打印輸出變量的字符串內容。

在您的代碼片段中,您使用print作爲第一個參數,它必須是格式字符串。

這種做法一開始似乎沒有問題,但如果您的變量包含格式化轉義字符'%',則printf()會在您僅提供一個參數時尋找更多參數,並導致程序崩潰。

試着改變你的printf語句如下:

的printf( 「%S的聯動和%s失敗\ n」,部件1,element2的);

+0

問題在於element1和element2不是字符串。他們是GstElements。我想(如果可能的話)元素的名稱。 – SSumner