如何在Lazarus/OSX项目中让{$IFNDEF DEBUG}起作用

3

当在调试器下运行时,我需要禁用一些代码。

因此,我只需要想象这样做:

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

然而,ifndef 内的代码在调试器中执行时会导致崩溃。

我使用的是 Lazarus 0.9.29 和 FPC 2.4.0 版本。

2个回答

2
你提到的编译器指令实际上是编译器指令,而不是调试指令。它们与编译过程有关,完全独立于调试系统。
你需要做的是:
- 当你想要调试程序时,定义DEBUG符号。这将不会编译存在于测试中的块,并且在调试会话中不运行。 - 当你想要发布该代码时,取消定义DEBUG,一切就准备好了。
你混淆了编译和调试,并将它们放在同一个上下文中。它们实际上位于完全不同的上下文中。这可能是因为你在同一个GUI系统下编译和调试,但是如果你编译一个程序,调试器只会查找断点。
希望这能帮到你。
编辑:你可以通过在程序/单元的顶部简单地{$DEFINE DEBUG}定义它,或使用Lazarus选项窗格将其添加为命令行参数。
完整回答。

所以,问题是Lazarus没有定义该符号...我在哪里可以定义它? - mamcx
1
你可以在程序/单元的顶部通过简单的 {$DEFINE DEBUG} 来定义它,或者使用 Lazarus 选项面板将其添加为命令行参数。 - Gustavo Carreno
这条注释就是答案。谢谢。 - mamcx

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

如果 $DEBUGINFO 打开,那么会在调试器中运行!


嗨,VDPasha,欢迎来到stackoverflow。您能更详细地说明一下该代码如何“使{$IFNDEF DEBUG}在lazarus / osx项目中工作”,或者为什么ifopt内部的代码不会像问题中的ifndef那样导致调试器崩溃吗?有什么区别? - Armfoot
选项 D+/- 显示启用了调试器信息 Debugger_Setup 表示应用程序以调试模式构建。 - VDPasha
1
{$IFOPT D+} {$DEFINE DEBUG} {$ENDIF} :) - VDPasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接