delphixe中的调试代码
我是一名长期从事Delphi开发的人,过去我在开发过程中使用第三方工具进行日志记录和调试(称为Smart Inspect),但是现在我已经升级到Delphi XE,我想尝试使用IDE进行调试 我的问题是,给定一个函数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
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就不会麻烦调用虚拟过程。