2009-10-17 164 views
7

我一直在環顧四周,但無法弄清楚如何在gdb中打印出評估結果。即例如在下面的代碼:gdb - 如何打印C++評估結果

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

(以上我是想出去檢查字符串按字母順序排列的可能方法,以及wasnt絕對肯定它工作正常)

現在我可以看min_node看看如果值發生變化,但涉及的代碼更多,這有時會更復雜。我想知道是否有一種簡單的方法來觀察gdb/program當前所在行的測試評估。

非常感謝!

回答

16

gdb中沒有表達式級單步執行,如果這就是你要求的。

您的選項是(從最常見的到最不經常使用):

  1. 計算表達式在gdb,做print strcmp(current_node->word,min_node->word)。令人驚訝的是,這是有效的:gdb可以通過將代碼注入正在運行的程序並讓它執行代碼來評估函數調用。當然,如果函數有副作用或者可能會崩潰,這是相當危險的;在這種情況下,人們通常不會考慮潛在的問題,因此是無害的。
  2. 執行指令級(彙編)單步執行(ni/si)。當調用指令完成時,根據處理器約定(x86上的%eax),可以在寄存器中找到結果。
  3. 編輯代碼以將中間值分配給變量,並將其拆分爲單獨的行/語句;然後使用常規的單步執行並檢查變量。
+0

太棒了,謝謝 - 這有幫助! – nero

4

你可能只是試着鍵入:

呼叫「my_funtion()」

至於我的rember,儘管當內聯函數將無法正常工作。