VC++的调试

关于VC++2005 不能调试的问题     (转载)  前一段时间用VC2005就发现有个程序突然不能调试了,惊讶至极。然后也不知道什么原因就又能调试了。更加惊讶。这一灵异现象是我对vc2005的印象大打折扣。       今天VC2005无法调试的现象再次神奇出现。我重建工程了几次,也没见效,要不是光驱不好使,我都要重装系统了。就在我快要崩溃的时候,在网上找到了一篇文章,按照文中给出的方案,问题终于解决。      阅读详情
在VC程序中使用调试语句 为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。 一、断言 1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。断言具有以下特征: .断言是用来发现运行时刻错误的,发现的错误是关于程序实现方面的。 .断言中的布尔表达式显示的是某个对象或者状态的有效性而不是正确性。 .断言在条件编译后只存在于调试版本中,而不是发布版本里。 .断言不能包含程序代码。 .断言是为了给程序员而不是用户提供信息。 使用断言最根本的好处是自动发现许多运行时产生的错误,但断言不能发现所有错误。断言检查的是程序的有效性而不是正确性,可通过断言把错误限制在一个有限的范围内。当断言为假,激活调试器显示出错代码时,可用Call Stack命令,通过检查栈里的调用上下文、少量相关参数的值以及输出窗口中Debug表的内容,通常能检查出导致断言失败的原因。_ASSERTE宏(属于C运行时间库)还能在断言失败时显示出失效断言。下面我们讨论一下MFC库中的断言。 2、MFC库中的断言 (1) ASSERT(布尔表达式) 用MFC时最好选择ASSERT宏,它的优点是即使出现了WM_QUIT消息也能显示断言失效消息框。 (2) VERIFY(布尔表达式) VERIFY宏中的布尔表达式在发布版本中被保留下来。VERIFY宏简化了对函数返回值的检查,一般用来检查Windows API的返回值。由于VERIFY宏里的布尔表达式在发布版本里保留了下来,因此最好尽量不要使用这个宏以实现程序代码和调试代码的完全分离。 (3 )ASSERT_VALID(指向CObject派生类对象的指针) ASSERT_VALID宏通过调用重载的AssertValid函数来确定指向CObject派生类对象的指针是否有效。无论你什么时候从CObject派生类中得到一个对象,在对这个对象做任何操作之前都应该调用ASSERT_VALID宏。 (4) ASSERT_KINDOF(类名, 指向CObject派生类对象的指针) 这个宏用来验证指向CObject派生类对象的指针是否从某个特殊类中派生,在调用它之前先调用ASSERT_VALID宏。只有在很特殊的场合下才用得到,如检测编译器可能错过的对象类型问题。 此外,还有两个没有正式文件的ASSERT宏的变种:ASSERT_POINTER(指针,指针类型),ASSERT_NULL_OR_POINTER(指针,指针类型)。 3、什么时候使用断言 把断言看作一种简单的制造栅栏的方法,这种栅栏能使错误在穿过自己时暴露。 .检查函数的输入 .检查函数的输出 .检查对象的当前状态 .坚持逻辑变量的合理性和一致性 .检查类中的不变量 公有成员函数比私有和保护的成员函数需要更全面的断言。 不正确地使用断言会导致错误。断言应该检测那些在程序正常运行的时候永远都不可能出现的状态。断言是用来揭示错误的,而不是用来纠正运行时刻错误的。 4、断言与防御性编程(Defensive Programming) 断言在调试的时候向程序员揭示运行时刻错误(调试版本里),而防御性编程使用户在运行程序(发布版本里)时,当出现意外情况时程序仍能继续工作。实际上,防御性的编程要求程序在检测到意外时返回一个“安全”的值(比如布尔函数返回false,指针和句柄返回空值),一个错误代码或者抛出一个异常来解决问题。特定的防御性编程技术包括:处理无效函数参数和数据、出现问题的时候程序失败、检查临界函数返回的错误代码以及处理异常。需要防御性编程的标准问题包括:错误的输入数据、内存或者硬盘空间不够、不能打开一个文件、外部设备不能访问、网络连接不上或者甚至在程序中还有错误,目的是保持程序的运行状态。如果你的程序是防御性的,别忘了使用断言。如果你使用断言,也别忘了防御性编程。这两种技术最好结合在一起使用。 二、跟踪语句 1、基本概念 跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。跟踪语句的特性如下: .跟踪语句用于报告代码中重要的运行事件。 .跟踪语句的编译通常是有条件的,并只存在于调试版本中,而在发布版本中不被编译。 .跟踪语句不能包含程序代码或对程序代码有间接的影响作用。 .跟踪语句的目的是向程序员提供信息,而不是向用户。 跟踪语句也是调试语句,它可以执行程序,并且在运行中程序员可以查看变量。跟踪语句对于那些使用交互式调试器很难调试的程序是很有效的。 跟踪语句和断言的区别如下: .跟踪语句是无条件的,断言是有条件的布尔语句。 .跟踪语句用于显示程序执行和变量值,不直接显示bug,断言用于显示出bug。 .跟踪语句将信息输出到调试窗口或文件中,可被随意地忽略,断言打断程序的执行。 2、MFC中的跟踪语句 在MFC中,你可以使用TRACE和AfxOutputDebugString宏、CObject::Dump虚拟函数和AfxDumpStack函数。TRACE宏由AfxDump实现,AfxDump由AfxOutputDebugString实现。AfxOutputDebugString宏和AfxDumpStack函数可以在所有版本中编译,其他只能在调试版本中编译。 (1)TRACE宏有以下形式: _TRACE(reportType,format); _TRACE0(reportType,format,arg1); _TRACE1(reportType,format,arg1,arg2); _TRACE2(reportType,format,arg1,arg2,arg3); _TRACE3(reportType,format,arg1,arg2,arg3,arg4); 在MFC中,推荐使用TRACEn宏,当使用TRACE宏时需要使用_T宏来格式化参数以正确解决Unicode的校正,而TRACEn不需要。 MFC TRACE宏中的一个缺点是AfxTrace函数使用一个512字符固定大小的缓冲区,这使得它在跟踪长字符串时是无用的。 (2)CObject::Dump CObject类有一个转储(dump)虚拟函数,所有继承CObject的类都可以通过重载这个函数,输出它们的值。 3、Visual C++消息Pragma 消息Pragma实际上是一个编译时的跟踪语句,你可以使用它来警告在预处理过程中发现的潜在的编连(build)问题。典型的例子: #if (WINVER>=0x0500) #pragma message (“NOTE:WINVER has been defined as 0x0500 or greater.”) #endif 消息Pragma是非常有用的,尤其是在复杂编连中。然而,如果你要检测一种特定的问题,而不是潜在的问题,使用#error预处理来代替打断编译会更直接一些。 每当你的程序中有错误而你想得到更多信息的时候,你应该去查看一下跟踪消息。由于VC输出窗口的缓冲区是有大小限制的,因此如果跟踪消息数据产生的速度超过输出窗口处理的速度,那么消息会塞满缓冲区,导致数据丢失。避免这个问题的简单方法是在输出大量数据的代码段如转储对象时,调用Sleep API函数。 三、异常 1、基本概念 错误是一种条件,在这种条件下,如果不执行额外的处理,线程就不能正常地执行下去。异常是用于处理错误的。使用异常的一个很明显的好处就是它们通过发出错误信号,可以让程序代码和错误处理代码分开,而且不会让程序忽略错误,你不用不断地检查函数的返回值,因此它们将程序代码简单化。另一个好处是它们不需要严格的编程作风。 异常的基本特性: .异常是基于每个进程而提出并处理的。 .异常不能被线程忽略,必须被处理。 .未处理的异常会使进程结束,而不仅仅是结束线程。 .异常出来在释放栈时会释放所有的栈对象,避免了资源的漏洞。 .异常处理需要大量的额外操作,使得它不适于经常运行的代码。 .可以抛出任何类型的异常对象,除了整数。 如果正确执行,异常处理有下面的特性: .异常是不是正常的运行结果,是特殊情况。 .异常在返回值无效的情况下使用。 .异常是可靠的,不可能被忽略。 .异常简化了错误处理,简化了程序代码,使错误处理更加方便。 Visual C++的默认情况下,在调试版本中处理异常,而在发布版本中并不进行处理。由于异常也是错误,Windows异常码采用了同Windows错误码一样的位映射模式,为一个32位的值,这些码由Microsoft定义,任何异常码的最高四位总是1100(二进制),即十六进制里的0xC。 2、Windows结构异常和C++异常 Windows结构异常作为硬件异常(如访问非法或被零除)或操作系统异常的结果被抛出,C++异常只能由throw语句抛出。Windows结构异常处理不能处理对象的解析,因此你应该在C++程序中一直使用C++异常。然而,C++异常不能处理硬件和操作系统异常,你的程序需要将结构异常转化为C++异常。C++异常并不直接从你的程序代码中抛出而是从C++运行库中抛出,因此你需要调用栈窗口来返回你的代码。为了正确处理硬件和操作系统异常,你可以创建自己的异常类并使用_set_se_translator函数安装一个结构异常向C++异常的转化器,但不要捕获那些不能恢复所产生问题的转化后的结构异常。 3、MFC中的异常 在MFC中,所有的异常对象都是从CException基类(它有使用起来非常方便的GetErrorMessage和ReportError成员函数)中派生来的。大多数的MFC异常对象都是动态分配的,而且当它们被捕获时,必须被删除,而没有被捕获的MFC异常由MFC本身在AfxCallWndProc函数中捕获并删除。 4、异常的开销 当抛出C++异常时,函数调用链将从此回溯搜索,寻找可以处理抛出这类异常的处理器。若没找到,进程结束。如果找到,调用栈将被释放,所有的自动(局部)变量也将释放,然后栈将被整理为异常处理器的上下文相关设备。因此异常开销由一个异常处理器目录和一个活动的自动变量表(它需要额外的代码、内存,而且不论异常是否抛出,都会运行),还得加上函数调用链的搜索、自动变量的解析和栈的调整(它只在抛出异常的时候需要执行)组成。 5、异常策略 (1)抛出时机 抛出异常的时机应该是一个函数发现一个错误,如果没有一些特殊的操作,该错误能阻止程序正常的运行,而这种操作它自己不能完成,或是在函数不可能有返回值的时候。 使用异常处理更简单,更可靠,更有效,可以创建更健壮的代码。然而,应该只在意外的情况下使用异常处理。如果你认为一个指针应该是空值,这种条件下就直接在代码中检查这个值,而不要使用异常。 (2)何时捕获 对于这个问题,有一些可能的标准: .当函数知道如何处理这个异常时。 .当这个函数可以合理地处理这个异常而高级的函数不知道如何处理时。 .当抛出异常可能使进程崩溃时。 .当函数可以继续执行它的任务时。 .当需要整理分配好的资源时。 异常处理的一个缺点是它可能导致资源的泄露。因此,防止资源泄露更应该是保持程序异常安全的一部分。栈释放时会自动整理局部变量,但不包括动态分配的变量。可以使用智能(smart)指针来保护你的代码在存在异常的情况下不会产生资源泄漏。 (3)怎样捕获 .非MFC的C++异常应该通过引用来捕获。使用引用捕获异常不需要删除异常对象(因为使用引用捕获的异常会在栈中传送),而且它保留了多态性(因此你捕获的异常对象正是你抛出的异常对象)。 .MFC异常应该通过指针来捕获。使用指针捕获异常需要你删除对象。因为它们通常从堆中分配,当你处理完异常之后,需要调用Delete成员函数来删除。你不可以使用省略捕获处理器捕获MFC异常,这会导致一个内存泄露。必须使用Delete成员函数删除MFC异常,而不用delete,因为一些MFC异常为静态对象创建。 在释放栈的过程中抛出异常会导致进程的终止。释放栈涉及到调用析构函数,异常可以阻止调用delete操作符,这样会有资源泄漏,因此异常最好不要从析构函数中抛出。如果非要在析构函数里抛出异常,必须妥善处理,避免资源泄漏。 6、异常与防御性编程 在异常发生时继续执行程序,远比执行一个正常的关闭动作要重要。如果可能,应该将精力集中在继续执行程序,并在必须的情况下才正常地关闭程序。可能最根本的正常关闭是一个在崩溃时可以重新启动自己的进程,这是Windows资源管理器使用的一种技术。 如果一个与错误相关的C++异常是可预料的,如果它发生在非关键性的代码中,如果它不是发生在程序启动或结束过程中或一个不可恢复的结构异常的结果中,这个程序就可以从其中恢复。 一旦你的程序可以从与错误相关的异常中恢复,应该先检查程序的状态和它的文档。如果程序和文档已经被破坏了,进程也应该终止运行。否则,程序需要通知客户机确定动作的过程。如果客户机同意执行下去,程序应该恢复错误并继续执行。 四、返回值 并不是在所以场合下都能使用异常,如在使用Windows API编程或带有COM编程时并不使用异常。在异常不适合的时候,使用返回值是一个好的办法。 返回值的基本特性: .返回值可以指示正常和不正常的函数运行,但不能阻止线程的继续运行。 .返回值很容易被忽略。 .返回值在典型情况下是一个整数,通常映射符合于一个预定义的值。 .返回值能高效地传递和接收。 因此,返回值最适合用于以下的情形: .用于非错误的状态信息 .用于大多数情况下可以随意忽略而不会出问题的错误。 .用于更易于出现在循环中的错误。 .用于中间语言模块如COM组件中的错误。
已调试通过的ZLIB VC++示例程序 ZLIB是一个开源、通用的压缩库,由Jean-loup Gailly和Mark Adler编写,并被广泛应用于多种操作系统和编程语言中。它提供了高效的数据压缩和解压缩功能,采用了著名的DEFLATE压缩算法,该算法结合了LZ77算法和霍夫曼编码。ZLIB的设计目标是提供一种通用的数据压缩方法,使之能够在不同的平台和环境中运行而无需改变其源代码。在开始使用VC++集成开发环境之前,了解其系统要求是至关重要的一步。这是因为系统配置直接影响着开发效率和性能,同时也会关系到能否顺利安装和运行开发环境。 阅读详情

相关推荐

VC9.0 Debug版的动态库

可以不用安装VC9.0或Redist包,直接将DLL和应用程序放在一起。

VC Debug

为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。 一、断言 1、基本概念   断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。   断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的地方发现

Leonard的专栏 1526

Unity3D移动平台简单实现

在电子游戏中移动平台可谓是十分常见的,如平台从一处至另一处的来回移动,或当需要玩家触发机关时,平台浮动并按一定的路线移动至目标处。本文主要是在Unity3D引擎下使用少量脚本实现两点之间来回移动平台的最基本功能,是一种比较简单且好理解的移动平台解决方案。 涉及到的点如下: 平台对象的实现 平台移动路线的设定 处于平台上游戏对象(如:玩家)的相对运动 创建平台控制对象 创建平台实...

长溪木可的博客 4690

VC6.0之Debug调试总结

VC6.0Debug调试总结1.       如何显示Debug工具栏窗口?①:在任意工具栏的位置,单击鼠标右键,勾选Debug项    ②:Tools---->Customize--àToolbars--àDebug--àclose    引申:工具栏和工具条的区别?    一个工具栏可以放置多个工具条。2.关于断点调试F9:设置或去除断点。如果当前行未设置断点,按F

1万+

Ubuntu20.04配置PX4环境启动或编译jmavsim 出现的错误及解决办法

错误1:ant命令未找到

Iamsonice的博客 8857

SV fork join_none & for循环结合使用

fork join_none与循环联用常见问题解决方案

ZhangShuHuai11的博客 881

VC++运行时库Debug_heap.cpp Debug Assertion Failed!

系统切换到vs2017,出现了Debug Assertion Failed!错误.网上搜索了下这个问题,发现在vs家族中,有很多这样的问题。其中,下面的文章认为是vs版本不匹配的问题,https://blog.youkuaiyun.com/wangyjfrecky/article/details/79526808,从现象上看确实是这样的原因引起来的,我在vs2015就没有出现这个问题。但是这不是根本原因,我尝...

shuwu 1万+

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1076

MSVC Debug 与 Release 库

或者这样生成的库或者exe程序名会多一个d字符。如下。

Wlk1229 1921

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1881

Oracle恢复学习实战小结

     学习oracle10g 043课程有段时间了,前一两个星期学习了backup/restore相关的内容,刚好公司有要求要为host服务器做一个备用机以防止数据意外丢失。于是,实战开始了。     首先介绍host服务器架构。host以oracle数据库作为底层数据存储,以公司总部开发的Santorin作为应用,主要提供给测试台架数据存储、数据访问、数据导入导出、用户权限管理和数据自动备份

kseawolfk的专栏 1036

VC++中调试Release版本

自:http://www.china-askpro.com/msg36/qa35.shtml VC++中调试Release版本时怎样设置断点 编号:QA003535 建立日期: 2000年11月13日 最后修改日期:2001年12月11日 所属类别: C/C++ - 其他方面 打听:     操作系统: win9x     编程工具: VC6.0     问题: VC++

静 1406

软件工程实验报告--用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

m0_73814332的博客 4169

VC++开发工具与调试技巧整理

VC++开发工具与调试技巧整理 2010-11-10 18:06:47.0      来源:Csdn博客         作者:zhangyuanlovelife 关键词: VC++ C++ 1、如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Lin

编程学习之路 985

【DRAM存储器六十九】DDR5介绍--2N mode 和 CS Geardown mode

摘要: DDR5内存速率提升至8400MT/s以上时,信号完整性成为关键挑战。JEDEC在JESD79-5B标准中引入2N Mode和CS Geardown Mode两项技术,通过“时间换稳定性”优化时序裕量。2N Mode默认启用,将命令周期延长至两倍时钟周期,增强全局命令稳定性;CS Geardown Mode则针对片选信号(CS_n)降低采样频率,提升局部信号容错能力。两者均需通过特定寄存器配置,适用于高频场景下的性能与稳定性平衡。这些技术为DDR5在高频运行中提供了可靠的时序保障。

highman110的博客 229

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

使用VC++6.0调试C语言代码

使用VC++6.0调试C语言代码第一步:编译第二步:开始调试可能会出现的问题 第一步:编译 C语言是一种编译型语言,所以我们在进行调试加断点时,不像Python那样可以直接加断点,在VC++6.0中,刚刚写完的代码是无法直接加断点的。 如上图,这时候还未进行编译,能看到工具栏里右面几个按钮都是无法点击的,只有最左边两个编译生成的按钮可以使用。我们要先对这段代码进行编译。 编译过后,已经生产好了e...

lhx0525的博客 1620

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用VC++远程调试Linux程序

为什么要用VC++来调试Linux程序 Linux下面的gdb也很好用,说真的,缺点是在调试大型程序的时候不太方便,比如来回的切换线程,查看堆栈等等,总是没有那么直观,但是VC就好一些,毕竟是GUI界面,线程切换,堆栈查看等等,要方便很多,再比如查看内存值,函数参数等等,VC的图像界面就要占一些优势,话不多说,开启调试Linux程序之旅。 更详细的描述,可以参考 https://edu.youkuaiyun.com/course/detail/28915 远程调试Linux程序 准备工作 Linux上.

zhanghaiyang9999的专栏 794

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

vc++如何实现远程调试

  软考程序员考试视频教程 点击下载 vc++如何实现远程调试 *假设调试机IP 192.168.0.182   远程机IP 192.168.0.161*远程机为调试机分配权限,使调试机可以使用远程桌面登陆到远程机器上(这样调试起来方便)。*调试机上安装visual studio .net 2003共享调试机上的Visual Studio上的远程调试

wangwb0820的专栏 1060

Windows程序调试系列: 使用VC++生成调试信息

Windows程序调试系列: 使用VC++生成调试信息ZhangTao,zhangtao.it@gmail.com, 译自 “Generating debug information with Visual C++”,Oleg Starodumov 出处: http://www.cnblogs.com/itrust/archive/2006/08/17/479603.aspx 引子   当我们

软件开发资料汇总 318

【141031】VC++版串口调试助手源码

VC++版串口调试助手源码,功能还是比较多的,接收区和来显示串口消息,在调试时,可指定串口、波特率、校验位、数据位、停止位,关闭串口和清空接收区、以十六进制调试、保存显示数据、在同一周期后自动发送数据、选择发送文件、计数器清零等功能,代码在VC++6.0中可直接编译。 源码下载地址:点击下载      ...

资源小站 9633

VC++调试中遇到的各种简单问题(一)

VC++调试中遇到的各种简单问题:1.LINK : fatal error LNK1168: cannot open Debug/dial4.exe for writing解决方案:把你编好后运行了的程序关掉就可以了。2.VC++中位图的引入问题(1)我将一个图片改成.bmp格式之后,在资源视图里右键点击Bitmap->Import,然后移入我之前的那个图片,怎么总有提示说移入成功

liwei_307的专栏 900

使用VC++生成调试信息

Windows程序调试系列文章——使用VC++生成调试信息 使用VC++生成调试信息   ZhangTao,zhangtao.it@gmail.com, 译自 “Generating debug information with Visual C++”,Oleg Starodumov 引子   当我们使用调试器来调试程序时,我们希望能够单步调试到源代码中,在代码中设置断点,

雪候鸟的专栏 1643

VC++调试OCCI程序的关键设置

<br />VC++调试OCCI程序的关键设置<br /> <br />zz from: http://www.qingfengju.com/article.asp?id=226<br /> <br /><br />#define WIN32COMMON<br />//解决error C2995: 'getVector' : template function has already been defined<br />#include <occi.h><br />using namespace oracl

fxismonk的专栏 841

VC++调试方法和技巧

VC++调试方法和技巧 便于调试的代码风格: 1.       不用全局变量; 2.       所有变量都要初始化,成员变量在构造函数中初始化; 3.       尽量使用const; 4.       详尽的注释。 VC++编译选项: 1.       总是使用/W4警告级别; 2.       在调试版本里总是使用/GZ编译选项,用来发现在Release版本中才有的错误;

《好好先生》专栏 829

VC++中调试Release版本时怎样设置断点

QA003535建立日期: 2000年11月13日 最后修改日期:2001年12月11日 所属类别: C/C++ - 其他方面 打听:     操作系统: win9x     编程工具: VC6.0     问题: VC++中调试Release版本时怎样设置断点?我的程序Debug 版本工作正常,Realse 版本一运行就出错!Message Box显示

3123

VC++调试技巧

<br />一、诊断调试<br />VC++提供了: ASSERT 、ASSET_VALID 、 DEBUG_NEW 、TRACE 、VERIFY等宏.<br />1、ASSERT(Boolean Expression);<br />参数Expression是一个逻辑圾达式,若为真,则一切运行正常,若为假则程序停止运行,并且弹出一个“警告”对话框,对话框上有三个按钮,终止,重度,忽略,若选择终止,系统将停止调试。选择重试,系统将调用函数AfxDebugBreak(),并激活调试器,显示出断言失败的代码。若选

nanhaizhixin的专栏 952
上一篇: 找工作
下一篇: Trend Micro
raphaelxia
博客等级 码龄22年 6粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值