2010-07-23 92 views
2
#include<stdio.h> 
#include<string.h> 

int main(void) 
{ 
    int f; 
    char duma[] = "asd char"; 

    f = strlen(duma); 
} 

因此,當我在調試器中運行它並在「watch」表中鍵入strlen(data)時,它獲取像strlen()這樣的單詞的消息不存在或類似的東西,意思是strlen不存在,但在當地人f = strlen(杜馬)我的意思是它進行計算,並顯示陣列中的字符數。在即時它只是像在手錶strlen一樣不存在...調試器越來越奇怪了嗎?

因此,任何建議我怎麼能解決它?

在此先感謝

回答

2

「watch」用於變量而非函數,有一些例外。一般來說,您不希望將功能放在監視窗口中,因爲它們可能會產生副作用,並且每次顯示時都會更改程序的狀態。

對於這樣的代碼,你應該把f放在觀察窗口中,而不是strlen(duma)

+0

VS調試器能夠在手錶,即時等窗口中評估許多類型的表達式,而不僅僅是變量。 – 2010-07-23 01:21:14

1

strlen是一個函數,而不是一個變量。調試器將不得不每次調用該函數來更新正確的值。這不會很有效。無論如何,調試器要求你在那裏輸入變量名稱,而不是函數。

0

你可能會運行到上調試器的表達式計算器下列限制:


編輯:

我不認爲我是對的關於「intrins ic'部分。我最初使用VS2010進行測試(這是我最容易獲得的) - VS2010似乎能夠毫無問題地評估strlen(duma)

當我搬到一臺有VS2008的機器時(抱歉 - VS2005現在沒有安裝...),調試器無法評估strlen(duma),無論strlen()是固有還是不固定。


還有一個編輯

在VS2008我不能讓strlen(duma)在調試器監視窗口評價。但是,我能夠在觀察窗口中獲得myStrlen(duma)的評價,其中myStrlen()是一個明顯的包裝,它只是返回strlen()。這可能是您的一種解決方法(或者您可能想升級到VS2010)。

0

如果您的疑問是,您不能步入strlen函數,那麼原因是strlen來自標準庫,並且由於它們通常沒有調試符號,因此無法步入該函數。

用戶定義的函數編譯時帶有保留調試符號的選項,因此您可以逐步進入這些函數調用並逐行查看執行。

To have symbols from these routines available, you must satisfy two 
requirements for GDB: 
    * You must have debug versions of the libraries available. 
    * GDB must know where to find them. 

而且正如其他人指出你不能在功能上觀看,你可以觀察變量以瞭解它們的狀態何時改變。

+0

strken正在工作2天前...昨天剛剛停止工作,電腦沒有被觸及,我離開了它的工作...只是關閉了電腦,下一次是去的?!?!?! – ScReYm0 2010-07-23 05:55:49

+0

@ ScReYmo-你是什麼意思由strlen工作?你是如何設置手錶或進入功能的? 電源關閉不會導致系統庫,編譯器,可執行文件的行爲發生變化。所以請逐步提供更多信息。 – 2010-07-23 06:17:27

+0

我的意思是說,當我輸入strlen(數組)時,它會打印出我的數組長度。但是現在當我在SAME CODE strlen(array)上鍵入它的打印回錯誤:CXX0017:錯誤:未找到符號「strlen」而不是我的陣列長度 – ScReYm0 2010-07-23 21:26:56