2012-12-27 59 views
1

我試圖得到執行的語句序列在執行程序用C語言編寫後的目標計劃,但我找不到路。 我不需要在運行時獲得已執行語句的序列。 有沒有辦法做到這一點? 僅供參考,我知道gcov一個報告語句覆蓋,但它不能在目標程序,據報告執行的語句序列,因爲我知道(我想只有在目標程序的源代碼執行的語句的序列)。 我在Linux上運行的C程序用gcc編譯:)有沒有什麼方法可以在目標C程序中獲得執行語句的序列?

爲了您清楚的瞭解,請看下面的例子。

當我執行下面的程序我想執行如下語句序列。

1: int main() 
2: { 
3: int a = 10; 
4: printf("hello"); 
5: if(a == 10){ 
6:  printf("a == 0"); 
7: }else{ 
8:  printf("a != 0");} 
9: return 0; 
10: } 

輸出我想要得到的是: (因爲目標程序是什麼我想跟蹤只有一個對行語句,線 序列作爲輸出號足以讓我)

這個問題被問別人幾個小時前(見question),但它是由一些讀者沒有明確的答案關閉。 如果它有衆所周知的解決方案,請讓我知道。

+1

後,如果你問同樣的問題兩次,很可能,這將被關閉的重複。 – anishsane

+0

無法追蹤已完成的程序。您需要在運行時收集這些信息1)使用跟蹤工具,或2)用您自己的方式。 – perreal

+0

在編輯器中看到的行號可能不是實際編譯行數的行號。預處理器包括宏和其他*幕後的所有方式*東西肯定會「干擾」和「更改」您的行號。實際上,輸出結果幾乎沒有用,並且絕對不值得產生它的黑客。最好附加一個調試器並觀察程序流程。 –

回答

0

可以使用LINE預處理宏獲得行號,

只需添加printf("%d", __LINE__);每行

+0

這將適用於大多數情況,但是這需要手動&合理添加;因爲行可能不是簡單的語句行。例如(; | <10;我+ +我= 0)' – anishsane

+0

感謝您的回覆,你不應該爲'後,立即添加。但是還有其他方法可以自動完成嗎?不幸的是,我知道這一點,但這需要人工努力,正如上文所述的anishsane所述。我需要儀器超過10個程序,其中一些包含超過10000行。 – freddy

+0

我不確定,但您可以嘗試使用多處理,創建另一個可以獲取行號並在控制檯上打印的進程。雖然我不確定,而且我現在還有其他的東西被佔用,但是一旦空閒就會嘗試一下。 –

相關問題