Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
delphixe中的调试代码_Delphi_Debugging_Breakpoints_Delphi Xe - Fatal编程技术网

delphixe中的调试代码

delphixe中的调试代码,delphi,debugging,breakpoints,delphi-xe,Delphi,Debugging,Breakpoints,Delphi Xe,我是一名长期从事Delphi开发的人,过去我在开发过程中使用第三方工具进行日志记录和调试(称为Smart Inspect),但是现在我已经升级到Delphi XE,我想尝试使用IDE进行调试 我的问题是,给定一个函数 procedure MyFunction; var str : string; begin str := 'Foo'; //Debug, show value of str? str := AnotherFunction(str); //De

我是一名长期从事Delphi开发的人,过去我在开发过程中使用第三方工具进行日志记录和调试(称为Smart Inspect),但是现在我已经升级到Delphi XE,我想尝试使用IDE进行调试

我的问题是,给定一个函数

procedure MyFunction;
var
    str : string;
begin
    str := 'Foo';
    //Debug, show value of str?
    str := AnotherFunction(str);
    //Debug, show value of str?
end;
我如何调试并获得str的值,而不做像这样愚蠢的事情 showmessage(str)

如果某处有视频(或文章),那么我非常乐意阅读

是否有方法监视/输出变量的值。

1)您可以使用OutputDebugString函数将字符串输出到调试窗口


2) 您可以使用CodeSite Express。我推荐视频作为使用代码站点的起点,Delphi XE附带了代码站点日志记录,但我感觉您在谈论调试器本身

如果在例程中放置断点,当它命中时,它将中断到调试器。在IDE的左侧有一个LocalVariables窗格和一个Watches窗格。局部变量将显示所有局部变量的值,而Watches允许您设置它将跟踪其值的表达式

您还可以通过使用Inspect(
Alt-F5
)获得类似于手表的内容,但具有更详细的信息(尤其是对于对象等结构化类型)。此外,Evaluate/Modify(
Ctrl-F7
)将允许您键入表达式并对其求值。它不像Inspect那样详细,但它给了您更多的灵活性


如果您熟悉这些工具,您会发现调试要容易得多。

如果您只想使用IDE调试器,请执行以下操作:

  • 在某处设置断点
  • 右键单击断点圆圈并选择“断点属性…”
  • 按“高级”按钮显示更多选项
  • 取消选中“中断”复选框
  • 然后使用“日志消息”和“评估表达式”编辑框输入跟踪值

此类消息将发送到“事件日志”调试器窗格。右键单击窗格并选择“属性”。在那里,您可以过滤(“消息”)/hilight(“颜色”)跟踪消息,就像您在呼啸一样。

我更喜欢调试器提示。断开调试器后,将鼠标移动到代码中的任何“str”位置,您将看到其当前值。您还可以通过鼠标突出显示某些语句并对其求值。例如,突出显示“AnotherFunction(str)”并将鼠标放在上面。

其他答案都是正确的

我个人最喜欢的技术(与da soft的答案相同)是创建一个断点,该断点将消息记录到事件日志中,其中包含我希望记录的值,并且实际上不会“中断”(即,在不点击运行图标的情况下继续执行)。然后,每次到达该行代码时,我都会收到我的消息,并在日志中记录我的值。由于我可以返回并读取历史记录,以及查看当前值,因此我发现这比仅使用调试器监视窗口更有用

但由于Delphi XE包含代码站点,您可以做的远远超过断点中的表达式计算。然而,代码站点要求您修改代码以添加一些日志记录。但它比一个消息框要好得多

还可以使用OutputDebugString(PChar(s))将任何字符串输出到调试器。因为它可以包含您想要的任何内容,所以这是一种非常好的调试方式,但不会向最终用户显示内容

在我的许多应用程序中,我有一个特殊的跟踪缓冲区,它是循环的(也就是说,它只保留最后500行左右)。当我看到问题时,不仅会得到堆栈回溯,还会将其保存在内存跟踪日志中,这样我就有了问题发生之前的一些历史记录


您也可以查看该项目。

其他任何答案都没有问题,但我只想添加这些有用的函数

procedure DebugString ( const s : string ) ; overload ;
begin
  {$IFDEF DEBUG}
  OutputDebugString ( PChar ( s ) ) ;
  {$ENDIF}
end ;

procedure DebugString ( const s : string ; args : array of const ) ; overload ;
begin
  {$IFDEF DEBUG}
  OutputDebugString ( PChar ( Format ( s , args ) ) ) ;
  {$ENDIF}
end ;

12年的德尔福,我不知道这一点!有人知道它是什么时候被添加的吗?@Gerry:Delphi 7。可能5或6;不要再安装它们来检查了。@Gerry&Ken:我坐在Delphi 5前面,它已经准备好了。我也不知道-谢谢!早点知道这一点会非常有用。另一个工具在我的错误搜索!第5行,第7行:已分配且从未使用过,由optimizerIt消除,最好将这两个函数
内联
,这样当使用Release config编译项目时,CPU就不会麻烦调用虚拟过程。