VS下的断言

断言用crtdbg.h的_ASSERT()。

#include <assert.h>
#include <crtdbg.h>

int main()
{
    //__asm int 3; // CPU中断指令,软件中断,VS2022无法编译通过,MSVC取消了对于x64的C++内嵌汇编的支持,不要使用嵌入汇编的软件中断了,同时移植性和运行效率(CPU会被大量占用)也都不好。
    __debugbreak(); // 可以使用__debugbreak()代替int 3,代码断点。
    // 0xCC是中断指令int 3的机器码,两个0xCC(0xCCCC)就是一个烫字,会中断程序,Debug模式下未初始化的栈内存全部填充0xCC。
    // Debug模式下未初始化的堆内存全部填充0xCD,对应屯字。
    // Release模式下,栈和堆的内存不会进行填充操作,为了提高运行效率。

    // crtdbg.h,C运行时库断言
    _ASSERTE(0); // 显示行数和宏中语句
    _ASSERT(0); // 只显示行数(推荐使用)

    // assert.h,ANSI C 断言
    assert(0); // 只停在报错代码处(个人感觉一点都不友好:连行数都不显示,不推荐。不过,移植性好一些)

    return 0;
}

参考:
《关于assert、_ASSERTE、_ASSERT的一些问题  》:
https://www.cnblogs.com/Ray-chen/archive/2011/12/06/2277688.html
《使用断言》:
https://www.cnblogs.com/flamepenguin/articles/2105705.html
《C/C++调试技巧-debugbreak》:
https://www.bilibili.com/read/cv1165694/
《C 语言代码出错为什么显示「烫烫烫」,而不是其它字?》:
https://wenku.baidu.com/view/4131651d084c2e3f5727a5e9856a561252d3210b.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值