博客
关于我
VC++设置软件断点和“XXX已停止工作“对话框
阅读量:525 次
发布时间:2019-03-07

本文共 1465 字,大约阅读时间需要 4 分钟。

在VC++中设置软件断点可以通过三种主要方法实现。以下是具体操作步骤和注意事项。

方法一:使用汇编指令

在VC++中,可以通过编写汇编指令来设置软件断点。需要注意的是,x64标准的C++不支持直接嵌入汇编代码,因此这一方法主要适用于32位平台。

操作步骤:

  • 在需要设置断点的位置添加以下汇编指令:
    _asm int 3
  • 编译并执行程序,断点会在指定位置生效。
  • 注意事项:

    • 这种方法适用于32位项目,x64项目不支持使用。
    • 汇编指令需要与C++代码正确结合,确保语法正确。

    方法二:使用编译器提供的调试辅助函数

    Visual C++ 提供了__debugbreak()函数,可以用来设置软件断点。该函数会强制进入调试器,类似于用户手动按下断点。

    操作步骤:

  • 在需要设置断点的位置添加以下代码:
    __debugbreak();
  • 编译并执行程序,断点会在指定位置生效。
  • 优势:

    • 代码简洁,易于使用。
    • 不需要借助外部工具或调试环境。

    方法三:使用Windows API

    Visual C++还允许开发者通过调用Windows API的DebugBreak()函数来设置软件断点。这种方法与__debugbreak()相似,但通常用于更复杂的调试场景。

    操作步骤:

  • 在需要设置断点的位置添加以下代码:
    DebugBreak();
  • 编译并执行程序,断点会在指定位置生效。
  • 注意事项:

    • 需要确保调试器已经启用,否则程序会直接终止。
    • 该方法与__debugbreak()相比,代码略显冗长。

    注册表设置

    在某些情况下,可能需要通过注册表来强制弹出停止工作的对话框。以下是具体操作步骤:

    操作步骤:

  • 打开注册表编辑器。
  • 导航至以下路径:
    HKEY_CURRENT_USER\Software\Microsoft\Visual Studio\10.0\ProjectAssemblyCache
  • 创建新键值DebuggerEnabled,设置值为1
  • 重启Visual Studio,断点将自动弹出停止工作的对话框。
  • 注意事项:

    • 注册表修改可能会导致其他问题,建议备份注册表或进行逆向操作。
    • 该方法主要用于特定调试场景,日常开发中不建议频繁使用。

    实践步骤

  • 新建项目:在Visual Studio中选择“文件” > “新建项目”,选择“单文档项目”模板。
  • 导入示例代码:将以下代码添加到项目中:
    #include 
    #include
    using namespace std;
    void InitInstance()
    {
    HWND hwnd = CreateWindow(" místě", "窗口标题");
    if (hwnd == NULL)
    {
    cout << "窗口创建失败" << endl;
    return;
    }
    ShowWindow(hwnd);
    UpdateWindow(hwnd);
    }
    int main()
    {
    InitInstance();
    return 0;
    }
  • 设置断点:在InitInstance()函数中添加__debugbreak();DebugBreak();调试辅助函数。
  • 运行程序:按Ctrl+F5运行程序,断点将在InitInstance()函数处生效。
  • 总结

    通过以上三种方法,可以在VC++中轻松设置软件断点。选择具体方法时,需根据项目需求和开发环境进行权衡。

    转载地址:http://jydnz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>
    MySQL 的instr函数
    查看>>
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>
    MySQL 的Rename Table语句
    查看>>
    MySQL 的全局锁、表锁和行锁
    查看>>
    mysql 的存储引擎介绍
    查看>>
    MySQL 的存储引擎有哪些?为什么常用InnoDB?
    查看>>
    Mysql 知识回顾总结-索引
    查看>>
    Mysql 笔记
    查看>>
    MySQL 精选 60 道面试题(含答案)
    查看>>
    mysql 索引
    查看>>
    MySQL 索引失效的 15 种场景!
    查看>>
    MySQL 索引深入解析及优化策略
    查看>>
    MySQL 索引的面试题总结
    查看>>
    mysql 索引类型以及创建
    查看>>
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>