首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C/C++/Obj-C

vs2017 c++ debug 时遇到未定义行为直接退出调试,不弹出 debug assertion 提示

  •  
  •   v2byy · 44 天前 · 620 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道为什么使用 vs 2017 调试 c++代码的时候,没有 debug assertion 提示。比如以下代码

    char buf1[256] = { 0 };
    char buf2[128] = { 0 };
    
    memcpy_s(buf2, 128, buf2, 256);
    

    在 debug 配置下,执行 memcpy_s vs2017 直接退出调试状态,不会弹出出错的对话框。在 output 窗口中直接显示 program exit。

    尝试将 vs2017 中的 exception 设置都勾上,没效果。

    请问下这个问题怎么办? vs2017 哪里不对吗?

    stackoverflow 类似问题: stackoverflow

    5 回复  |  直到 2019-04-10 09:31:26 +08:00
        1
    ysc3839   44 天前 via Android
    单步汇编调试看看?
        2
    v2byy   44 天前
    @ysc3839 额,我觉得是不是 vs2017 设置的问题啊,单步汇编是怎么搞?

    像这种 access violation 的问题,vs2017 会抛出异常
    ```c++
    char* ch = NULL;
    *ch = 'p';

    ```

    用相同的代码在 vs2013 里测试,会提示 debug assertion 对话框
        3
    tinykey   44 天前   ♥ 1
    You'll have to use memcpy(), not memcpy_s() is you want to generate an AV. Memcpy_s() was designed to quickly terminate the program (without an exception) before anymore damage is being done.

    check this link: https://social.msdn.microsoft.com/Forums/vstudio/en-US/22c19530-2137-4b2d-9c04-99205ff3c4e5/memcpys-access-violation?forum=vclanguage
        4
    ysc3839   44 天前 via Android
    @v2byy 大概是 右键 显示反汇编。
        5
    v2byy   43 天前
    @tinykey 看了链接之后,我又重新去 msdn 上去看了下 memcpy_s 的文档,文档说 memcpy_s fail 会返回一个 error code。

    所以应该不是这个原因。但是到是有个发现,可能是 parameter validation 的原因。继续看 parameter validation 的文档,在参数校验失败,会 invoke 一个 invalid_parameter_handler。

    因为我在 vs2013 中测试 memcpy_s,是会有 debug asssertion 弹出的。我估计是不同的 c runtime 下设置的 invalid_parameter_handle 不相同。

    经过测试,在 vs2017 下设置一个自定义的 handler,是可以弹出 debug assertion 提示的。

    不知道 c runtime 在哪里设置了这个 handler 的,为什么 vs2017 带的 universal crt 为啥要修改这个设定呢?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2859 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 16ms · UTC 11:59 · PVG 19:59 · LAX 04:59 · JFK 07:59
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1