2010-06-22 62 views
3

我需要在調試器下運行時禁用一些代碼。

所以,我只是想象,這樣做:

{$IFNDEF DEBUG} 
    ... 
{$ENDIF} 

然而,IFNDEF內的代碼在調試器中執行,馬金會崩潰。

我拉撒路0.9.29 & FPC 2.4.0

回答

2

你提到實際上是編譯器指令:編譯器指令,不進行調試指令。

它們與編譯過程有關,與調試系統完全分離。

你所要做的是:

  • 當你要調試的程序,定義DEBUG符號。這不會編譯測試中存在的塊,也不會在調試會話中運行。
  • 如果您確實想要釋放該代碼,只需取消定義DEBUG並且所有代碼都已準備好出貨。

您正在編譯和調試混淆,並將它們放在相同的上下文中。
它們實際上駐留在完全不同的上下文中。
這可能是由於你在相同的GUI系統下編譯和調試的事實,但是如果你編譯一個程序,那麼調試器查找的唯一東西就是斷點。

希望它有幫助。

編輯:您可以通過一個簡單的{$ DEFINE DEBUG}在程序/股的頂部定義它的地方,或使用拉撒路選項面板將其添加爲一個命令行PARAM。

完成我的答案。

+0

所以,問題是這個符號不是由拉撒路定義的...我可以在哪裏定義它? – mamcx 2010-11-03 20:46:07

+0

您可以通過簡單的{$ DEFINE DEBUG}在程序/單元頂部的某處定義它,或者使用Lazarus Options窗格將其添加爲命令行參數。 – 2010-11-03 20:50:25

+0

那麼這個評論就是答案。謝謝。 – mamcx 2010-11-08 17:56:54

0
{$IFOPT D-} 
    //code 
{$ENDIF} 

if $ DEBUGINFO is on that is run with debugger!

+0

嗨VDPasha,歡迎來到stackoverflow。你能詳細描述一下代碼將如何「在lazarus/osx項目中使{$ IFNDEF DEBUG}工作」或爲什麼ifopt中的代碼不會像'ifndef'(從問題中)那樣崩潰調試器?有什麼不同? – Armfoot 2015-06-02 13:33:26

+0

選項D +/-顯示啓用了調試器信息[Debugger_Setup](http://wiki.lazarus.freepascal.org/Debugger_Setup)意味着應用程序以調試模式構建。 – VDPasha 2015-06-03 11:45:49

+1

{$ IFOPT D +} {$ DEFINE DEBUG} {$ ENDIF} :) – VDPasha 2015-06-03 11:56:40

相關問題