2013-07-24 64 views
3

我想在MATLAB R2011b中調試一個面向對象的應用程序,我沒有自己寫。爲此,我想在classdef的方法中放置一個斷點。據我所知,這是允許的。然而,當我運行應用程序時,斷點神祕地消失。爲什麼MATLAB刪除我的classdef中的斷點?

我在clear配置斷點,像這樣:

dbstop in clear 

時看到clear被調用。運行應用程序之前,我檢查了斷點的存在與dbstatus:

>> dbstatus 

Breakpoint for Processor>Processor.setResult is on line 114. 
Breakpoint for inputCompute is on line 30. 
Breakpoint is set for m_interpreter>clear. 

(有問題的斷點是在列表中的第一個)當我運行應用程序,在classdef斷點前消失首先要明確被稱爲:

>> rootFunction('configuration') 
417 clear('Data'); 
K>> dbstatus 

Breakpoint for inputCompute is on line 30. 
Breakpoint is set for m_interpreter>clear. 

要確定斷點被清除,我逐漸移動的斷點越來越接近根部函數的開始,發現問題的代碼行:

cd('./configs'); 

而且肯定 - 任何調用cd,即使是間接的,也會清除classdef中的斷點。這意味着run完全一樣。這是令人生氣的行爲。 MATLAB爲什麼要這樣做?我如何避免這樣做?

+2

我不能重新創建您所描述的行爲。你能否提供[SSCCE](http://sscce.org/)? –

+0

@FlorianBrucker提供一個SSCCE很難......我需要一個classdef文件和一個主函數,所以需要兩個文件。我對OOP也很陌生,我必須做這個調試才能明白髮生了什麼。你說你不能重新創建我描述的行爲。你可以發佈你的SSCCE嗎?然後我可以在我的MATLAB安裝中進行測試並進行比較。 –

+1

該類的m文件是否在MATLAB路徑或當前目錄中或兩者兼而有之?當使用MATLAB找到的代碼時,更改目錄可能會有奇怪的含義,因爲它存在於當前目錄中,噹噹前目錄也位於路徑上時,它也可能會感到困惑。 – kwatford

回答

1

如果此類僅在您的路徑上,因爲它在當前目錄中,那麼在代碼運行時更改當前目錄可能會產生意外的結果,包括清除斷點。

使用Set Path對話框或addpath函數將代碼的目錄添加到您的MATLAB路徑。通過這種方式,即使您更改當前目錄,也可以通過MATLAB訪問該目錄,從而解決您的調試問題。

3

我發現了同樣的錯誤,並將其報告給Matlab。他們說:

不幸的是,這是編輯器已知的一個bug。開發 部門意識到這個問題,並計劃在未來發布 版本。作爲一種變通方法,你可以使用一個線包含單 聲明

鍵盤

,而不是設置一個斷點。您可以輕鬆評論這條線。

JHC