掌握C++Builder的除错艺术-第二篇(完整版)之二

深入C++Builder6:编程技巧与实例详解 本文还有配套的精品资源,点击获取 简介:本书是C++Builder6集成开发环境的实用指南,适合有C/C++基础的开发者。书中涵盖了从基础知识到高级应用的各个方面,包括VCL框架、事件驱动编程、数据库编程、内存管理、异常处理、网络及多线程编程、自定义组件开发、项目管理及调试等。通过实战案例,帮助开发者提升软件开发技能,无论对于新手还是有经验的开发者,都是一本不可多得的参考书... 阅读详情
 

Mastering the Art of Debugging in C++Builder
Article 2 - Watching it Closely

掌握C++Builder的除错艺术

第二篇-近距离观察

(2) 

使用Evaluate/Modify(求值/修改)

最后一种显示变量或代码块的值的途径是Evaluate/Modify(求值/修改)窗口。这个窗口可以象打开巡视器一样打开,在您要Evaluate/Modify(求值/修改)的代码行上右击选择"Debug|Evaluate/Modify"就会弹出Evaluate/Modify(求值/修改)窗口。本窗口用来对表达式/变量求值并/或修改。Watches和/或inspectors也可以实现同样的功能。但如果您想要修改的话,这里恐怕是最好的地方。

“察看变量已经听够了,现在我想去看看我的代码到底怎么了,而不是干坐在这里。”我听见您如是说。下一节我们将在函数体内外单步跟踪直至断点(还记得前面的东西么?)。

在代码块内外进行Stepping(单步执行/跟踪)

在此有一件事要牢记,前面讲的绝大多数察看变量的办法是动态更新的。所以当您跟踪至新的一行的时候,变量的值会被自动重新求值,并且显示在窗口中的值被更新成新的当前值。

Okay,当您点击您所设置的断点时,您会看到您所需检查的变量。下一步就是在代码中单步执行并且近距离观察实际发生的与您所猜测的是否一致(通过使用watches/inspectors并跟随代码的执行路径前进)。

Stepping的类型

这部分解释起来似乎很简单。但下面的大部分都是来讨论您用这些能做什么(好像在别处没有听到过?)。您可以告诉调试器五种"stepping types"(单步执行类型)。我们会按Run菜单上的顺序来解释。我同时会给出它们的快捷键。在调试时使用快捷键的次数会多过使用菜单选项的(比较按10次键盘与选10次菜单,我想您知道什么更好)。

第一种是"Step Over"(在函数体外单步执行)或者f8。这会让调试器执行代码至当前函数的下一行可见的代码停下,或者当运行至当前函数的最后一行时,调试器返回至调用函数停下。在您知道所调用的函数没有问题时,stepping over功能很方便。

下一个是"Trace Into"(跟踪至函数体内)或f7。如果运行的当前行是调用一个函数,调试器将把我们带到调用的函数的第一行(即使是隐含调用函数,例如一个write属性)。否则执行至当前行的下一行。当您想看看这个函数到底做些什么时,这个功能非常方便。

接下来是"Trace to Next Source Line"(跟踪至下一个源代码行)或shift-f7。调试器会运行至下一个具有调试信息的代码行。这与"Trace Into"的区别,让我们举例来说明吧。当我们调用一个没有源代码的windows API函数并且这个API函数调用了我们代码中的一个回调函数。"Trace to Next Source Line"将在回调函数的第一行停下来,而"Trace Into"会忽略这个回调函数并在当前程序的下一行停下来。

然后是"Run to Cursor"(运行至光标处)或f4。调试器将运行代码直至光标所在的行。这使得不需设置断点又可以跳过大片代码变得很方便(考虑只需停顿一次的情况)。

还有"Run until Return"(运行至返回)或shift-f8。调试器将运行代码直至当前函数返回调用他的函数。当您不想手工单步执行至函数结束(假如您陷入一个循环中的话,这个过程会变的十分冗长)时,这么做就会很方便的跳到函数的结尾处。

最后一个是"Program Reset"(程序重置)或ctrl-f2。调试器会中断已运行的程序并返回至调试器。除非迫不得已不要这么做,因为对象所使用的资源没有被释放!!!(在一个数据库应用程序中,这样做2-3次后,您将不得不关闭并重启IDE,因为BDE内部资源将耗尽。您已经被警告啦)。当您不得不中止可执行程序时,这非常有用。

最后(却在菜单很上面的位置)是"Run"(运行)或f9。调试器将运行至程序结束,除非碰到您点击新的断点或发生异常。

Stepping的注解

要牢记的是所有这些单步执行方式在调试器通过断点时,调试器会对断点求值,若断点需要就停下。如果出现异常,调试器也会停下。

正如您所见,在正确的地方设置断点,察看变量并在代码中单步跟踪,我们能够以非常近的距离观察程序在做什么就好象它真的运行一样。这些功能在追查最困难的bugs---逻辑bug时,相当方便。

其他提示

如果您真的很勇猛并有汇编语言的经验,您可以点击"View|Debug Windows|Cpu"打开一个"cpu view"CPU窗口。这里不仅显示了当前可执行程序的指令的汇编指令,还有象CPU标志、寄存器的内容和不断更新的内存印象

使用Call Stack ("View|Debug Windows|Call Stack")可以很方便的找出发生异常之前或遇到断点之前的函数调用历史。记住,这里只是显示什么函数被什么函数调用过,并非真正的调用过程的历史记录。因此,这个窗口可能先会让您感到困惑。但是只要开着它来stepping through单步跟踪代码至函数体内,好好观察一下您就会完全明白了。

C++BUILDER4、5中,watch, local variable, 和 call stack窗口可以驻留在code主窗口中,使用起来更加方便。C++BUILDER5中还可以设定调试布局,以便在调试时使用(针对您在设计时使用的设计布局来讲的)。

使用所有我所公布的所有技术再加上一点点耐心和一双火眼金睛,您应该可以解决99%的bug。若您想找到bug,耐心是必要的。花点时间,深呼吸一下,不要让挫折吓倒。如果有必要,走出去5分钟干点别的,您会惊奇的发现自己有了新的视野或者发现开始时漏掉了什么步骤。

如果您有其他的技巧和提示觉得应该加入此文,请尽管来信告诉我们,我们会在以后的版本中加入您的意见。

好了,我希望这篇文章在某种程度上有助于耐心的读者们。如果正是这样,我会十分高兴自己干了件不错的工作。也许您所有的bugs都已微不足道了。

原著:Bill King

翻译:史平洋 - CKER


版权说明:

国内的网站上,有许多关于C++Builder的内容,但多以软件、组件为主。论坛里也大都不能令人满意,很空虚的感觉。书籍又都昂贵,内容却有抢钱之嫌。对银子不足的初学者、自学者关爱不够,因而想尽自己的绵薄之力。

文中的所有资料都是从国外网站上收集而来。因为E文不方便,所以翻成中文。因为English和计算机都不是非常好,文中的错误在所难免。若大家觉得有用的话,我计划不断搜集翻译一些有用的东西。

有任何意见和建议请mailto:cker@sina.com

您可以随意复制、分发、下载此文档。但未经本人同意,您不可以截取、改动本文片断,或用本文谋取任何形式的利益。

 

史平洋

2001.2

 

C++Builder中文学习大全 C++Builder作为一款高效的C++集成开发环境(IDE),为开发者提供了从设计到发布应用程序的完整解决方案。本章将带您领略其基础功能和特性,帮助您快速掌握使用C++Builder进行项目开发的基本流程。VCL(Visual Component Library)是C++Builder的核心组件库,提供了丰富而强大的用户界面组件,它允许开发者快速构建现代、功能丰富的Windows应用程序。在本小节中,我们来详细介绍几个常用的VCL组件及其应用。Button组件。 阅读详情

相关推荐

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1669

Visual C++调试 ASSERT()和TRACE()工具

Visual C++ IDE提供了功能强大的调试器,包括联编(build)工具和调试(debug)工具,Visual C++的调试工具栏如图2-20所示,在调试状态下,其中的某些按钮才会显示。 从左到右,各按钮的含义如表2-3所示。   如果我们发现某个程序中有bug 产生,就可以对其代码部分进行调试,以下罗列出通常采取的步骤。 在可疑的代码处添

Galaxy_Li的专栏 2179

虎符+红明谷+ctfshow渔人杯赛后复现

目录标题虎符CTFWeb-签到MISC-你会日志分析吗红明谷CTFWeb-write_shellMISC-我的心是冰冰的ctfshow渔人杯签到抽奖感受下气氛神仙姐姐阿拉丁迷飘啊飘简单二维码我跟你拼了 虎符CTF Web-签到 参考详细分析PHP源代码后门事件及其供应链安全启示 根据文章提示,添加恶意请求头 User-Agentt: zerodiumphpinfo(); 可以看到phpinfo内容 继续构造,查看根目录下的文件 User-Agentt: zerodiumsystem('ls /');

Atkx's Blog 1983

一个简单明了的c++ trace log 实现

基本要求是 1.线程安全 2.支持分级过滤 3.记录时间,线程id,开始记录头等等 4.跨平台 5.支持回调处理代码是考虑过跨平台的,主要是锁跟几个函数,有需要改动的地方应该很少,但目前还没做,因为要浪费时间测试呢,往后有需要再改改

tifentan的专栏 4780

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)

一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计.

qq_36045093的博客 8万+

安卓直链APK安装拦截全解析:从Play Protect到厂商管控的应对指南

在移动应用分发领域,APK(Android Package)安装是开发者与用户交互的关键环节。其核心原理涉及安卓系统的安全沙箱机制与权限管理体系,旨在保护用户设备免受恶意软件侵害。这一机制的技术价值在于平衡了应用生态的开放性与安全性,但也在应用推广、企业内部分发等场景中带来了挑战。尤其在通过官网、广告等直链渠道分发APK时,常会遇到安装转化率骤降的问题。这背后主要受到Google Play Protect云端扫描、安卓系统安装权限模型演进(如Android 8.0+的安装源授权)以及设备制造商附加安全层(如

weixin_33894640的博客 467

c++ builder在调试过程中捕获异常

一个困扰我N久的问题解决了,郁闷死我一直以来,用builder在调试时都不能捕获异常,一旦有异常发生,程序直接中断,trycatch放那儿跟没放一样但是直接运行程序时没有问题,今天受不了,到网上找了一下,NND郁闷死人原来在tools/debugger options/language exception/里可以设置真让人抓狂

李智胜的专栏 2555

ESP32+micro-ROS机器人开发实战:轻量级ROS2嵌入式集成

ROS2是现代机器人软件栈的核心框架,其基于DDS的分布式通信与QoS保障能力为多节点协同提供基础支撑;而micro-ROS作为专为微控制器优化的ROS2兼容中间件,解决了资源受限设备(如ESP32)接入ROS2生态的关键难题。其通过分层架构将DDS通信下沉至上位机Agent,使MCU仅需运行轻量Client,大幅降低内存开销(实测<180KB)并保留标准ROS2接口语义。该方案广泛应用于教育机器人、移动底盘、传感器节点等嵌入式场景,尤其适合基于ESP-IDF开发的Wi-Fi/BLE物联网机器人系统。本文以

weixin_29025501的博客 400

掌握C++Builder的除错艺术 第二篇(1)

Mastering the Art of Debugging in C++BuilderArticle 2 - Watching it Closely 掌握C++Builder的除错艺术第二篇-近距离观察(1)  1.      调试/除错可执行程序前的准备2.      工程选项3.      设置断点并闯入可执行程序4.      察看储存在变量中的

没吃过猪肉,光看见猪跑啦.................... 1413

【Claude】媒体文件处理错误:PDF 与 Image 过大的检测与预处理方法 bug报错已解决

图片压缩是必须的:原始图片的 base64 会占用大量 TokenPDF 提取文本优于传图片:文本版 PDF 比扫描版更省 Token分块处理大文件:不要一次性处理整个大文件控制分辨率:800x800 通常足够 Claude 分析。

博客 6359

uniapp - HBuilder提示adb: failed to install X Failure [INSTALL_ARSE_FAILED_NOT_APK:X(安装HBuilder调试基座失败)

安装HBuilderX调试基座失败,uniapp APP运行到手机adb: failed to install,Uniapp提示adb,uniapp ios 真机调试报错 uniapp安卓调试,Uniapp安装不了基座,手动安装基座,正在安装手机端HBuilder调试基座,点击运行到手机报错信息:基座无法正常安装,Uniapp-安装HBuilder调试基座失败解决方案,解决 HBuilderX 安卓基座安装失败的问题,显示adb报错,UniApp苹果真机运行调试(自定义基座,版本更新后/没有基座打开失败)如

🏆 前端领域优质创作者 8061

C++Builder 内存泄漏检查工具-CodeGuard

关于如何在BCB中使用CodeGuard一、为什么写这篇东西自己在使用BCB5写一些程序时需要检查很多东西,例如内存泄漏、资源是否有释放等等,在使用了很多工具后,发觉BCB5本身自带的工具——CodeGuard,非常不错,使用也挺方便的,但是摸索了很久(以及翻查了一些资料,包括HELP)才算是会用了。写这篇文章的目的希望有这方面的问题的朋友可以借鉴一下,大家互相学习,共同进步。我的联系方法

海鲨数据库架构师 6705

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5060

掌握C++Builder的除错艺术-第二篇(完整版)之一

    Mastering the Art of Debugging in C++BuilderArticle 2 - Watching it Closely掌握C++Builder的除错艺术第二篇-近距离观察(1) 1.        调试可执行程序前的准备2.        工程选项3.        设置断点并闯入可执行程序4.        察看储存在变

没吃过猪肉,光看见猪跑啦.................... 1970

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

掌握C++Builder的除错艺术-第二篇(完整版)之一 (转)

掌握C++Builder的除错艺术-第二篇(完整版)之一 (转)[@more@] Mastering the Art of Debugging in C++BuilderArticle 2 - Watching i...

csd3176的博客 191

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

掌握C++Builder的除错艺术-第一篇

 Mastering the Art of Debugging in C++BuilderArticle 1 - Coding it Right掌握C++Builder的除错艺术第一篇-正确书写代码  1.        简介2.        书写干净的代码3.        使用异常及异常处理能力4.        使用记录(logging)机制5.  

没吃过猪肉,光看见猪跑啦.................... 2371

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[转载]掌握C++Builder的调试艺术

(作者:霍炬编译)  程序的bugs越少,最终用户对这个程序的评价越高。而开发人员事先对bugs的处理越多,最终用户能提供的关于bugs的信息就越多,也越准确,这样,开发人员在接到最终用户反映之后,就能够快速找到出现bugs的那部分代码,并以最快速度发布程序的升级包。   在这份教程中,我们从最基本的部分开始,逐步介绍许多在调试程序时“应该做”或“不应该做”的原则。正如你将看到的,这份教程中所指的

游乐园 1475

ZT:掌握C++Builder的调试艺术

以代码为基础的调试方法  程序的bugs越少,最终用户对这个程序的评价越高。而开发人员事先对bugs的处理越多,最终用户能提供的关于bugs的信息就越多,也越准确,这样,开发人员在接到最终用户反映之后,就能够快速找到出现bugs的那部分代码,并以最快速度发布程序的升级包。   在这份教程中,我们从最基本的部分开始,逐步介绍许多在调试程序时“应该做”或“不应该做”的原则。正如你将看到的,这份教程中所

我一路走来--- 1811

EurekaLog C++Builder异常跟踪工具

EurekaLog是一个新的Delphi和C++Builder异常跟踪工具,它为应用程序(GUI、控制台、Web等)提供捕获所有异常、内存泄漏和检测无限循环和死锁的能力。它在引发异常的点生成调用堆栈的详细日志,显示单元、类、方法和行号,并在屏幕上显示,还可以选择通过电子邮件或Web服务器将其发送回您(使用HTTP-S/FTP协议或直接发送到您首选的“Web Bug Tracker”软件),这样有助于将错误定位和解决速度提高10倍。不需要其他文件(无DLL、无.map文件、无.tds文件)。

q2315702359的博客 484

C++ builder 常见问题汇总

C++ builder 常见问题汇总

3191

C++实现设计模式——Builder模式

C++实现设计模式——Builder模式 建造者模式定义 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 举例 举一个通俗的例子: 我们大家都玩游戏吧,每个角色会有很多属性,即构造参数,有一些是构造必需参数,如id,name,有一些是可以用默认的值,比如hp,level等

yxh_1_的博客 3377

C++ builder基础

C++ builder 简介 C++ Builder是由Borland公司推出的一款可视化集成开发工具。C++ Builder具有快速的可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面。 Inprise(原Borland)公司推出的Turbo C、Turbo C++ 、Borland C++ 以及Borland C++ Builder,无不是 C/C++ 编程者所钟爱的编程工具,而且每一个都称得上经典之作,Delp

weixin_43820463的博客 9568

C++设计模式之生成器模式(Builder)

生成器是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建 代码生成不同类型和形式的对象。假设有这样一个复杂对象,在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中;甚至还有更糟糕的情况,那就是这些代码散落在客户端代码的多个位置。如果为每种可能的对象都创建一个子类,这可能导致程序过于复杂:例如, 我们来思考如何创建一个房屋(House)对象。

波风水门 2634

C++设计模式-生成器(Builder)

表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。实现Builder的接口以构造和装配该产品的各个部分。为创建一个Product对象的各个部件指定抽象接口。构造一个使用Builder接口的对象。当构造过程必须允许被构造的对象有不同的表示时。定义并明确它所创建的表示。提供一个检索产品的接口。

Hank_W 1542

C++之生成器(builder)模式

0. 简介 生成器是一种创建型设计模式, 当构建一个复杂对象时,将构建过程与表示分离。使得同样的过程创建不同的对象。生成器与其他创建型模式不同, 生成器不要求产品拥有通用接口。 这使得用相同的创建过程生成不同的产品成为可能。生成器方法通常支持方法链 (例如 someBuilder->setValueA(1)->setValueB(2)->create() ),来组成复杂的对象。相比于工厂模式专门用于生产一系列相关对象而言,生成器重点关注如何分步生成复杂对象。 1. 生成器UML介绍 生

lovely_yoshino的博客 1万+

c++Builder模式

设计模式--Builder模式

1164
上一篇: 掌握C++Builder的除错艺术-第二篇(完整版)之一
下一篇: 代码的风格
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值