Visual Studio 2015 更新 1 C++“断点绑定失败”

Posted

技术标签:

【中文标题】Visual Studio 2015 更新 1 C++“断点绑定失败”【英文标题】:Visual Studio 2015 Update 1 C++ "The breakpoint failed to bind" 【发布时间】:2016-01-31 07:30:41 【问题描述】:

我在最新的 Visual Studio 中遇到断点问题。即使使用最简单的代码也不绑定:

#include "stdafx.h"


int main()

    int ololo = 0;
    return 0;

断点设置在线:

int ololo = 0;

我试图通过互联网查看问题所在,但老实说找不到任何与我的情况相符的答案,人事案件通常比这更复杂。

编辑: 新来源:

#include "stdafx.h"
#include <iostream>

volatile int TestGlobal;

void Foo()

    TestGlobal = 289173;
    int test = 90823;

int main()

    Foo();
    int notworking = 0;
    int in = 23;
    std::cin >> in;
    return 0;

生成的 ASM:

; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0 

include listing.inc

INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES

PUBLIC  ?TestGlobal@@3HC                ; TestGlobal
_BSS    SEGMENT
?TestGlobal@@3HC DD 01H DUP (?)             ; TestGlobal
_BSS    ENDS
PUBLIC  ?__empty_global_delete@@YAXPEAX@Z       ; __empty_global_delete
PUBLIC  ?__empty_global_delete@@YAXPEAX_K@Z     ; __empty_global_delete
PUBLIC  ?Foo@@YAXXZ                 ; Foo
PUBLIC  main
EXTRN   __imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z:PROC
EXTRN   _RTC_CheckStackVars:PROC
EXTRN   _RTC_InitBase:PROC
EXTRN   _RTC_Shutdown:PROC
EXTRN   __imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A:BYTE
;   COMDAT pdata
pdata   SEGMENT
$pdata$?__empty_global_delete@@YAXPEAX@Z DD imagerel $LN3
    DD  imagerel $LN3+50
    DD  imagerel $unwind$?__empty_global_delete@@YAXPEAX@Z
pdata   ENDS
;   COMDAT pdata
pdata   SEGMENT
$pdata$?__empty_global_delete@@YAXPEAX_K@Z DD imagerel $LN3
    DD  imagerel $LN3+55
    DD  imagerel $unwind$?__empty_global_delete@@YAXPEAX_K@Z
pdata   ENDS
;   COMDAT pdata
pdata   SEGMENT
$pdata$?Foo@@YAXXZ DD imagerel $LN3
    DD  imagerel $LN3+55
    DD  imagerel $unwind$?Foo@@YAXXZ
pdata   ENDS
;   COMDAT pdata
pdata   SEGMENT
$pdata$main DD  imagerel $LN3
    DD  imagerel $LN3+98
    DD  imagerel $unwind$main
pdata   ENDS
;   COMDAT rtc$TMZ
rtc$TMZ SEGMENT
_RTC_Shutdown.rtc$TMZ DQ FLAT:_RTC_Shutdown
rtc$TMZ ENDS
;   COMDAT rtc$IMZ
rtc$IMZ SEGMENT
_RTC_InitBase.rtc$IMZ DQ FLAT:_RTC_InitBase
rtc$IMZ ENDS
;   COMDAT xdata
xdata   SEGMENT
$unwind$main DD 025051e01H
    DD  010a230fH
    DD  070030025H
    DD  05002H
xdata   ENDS
;   COMDAT CONST
CONST   SEGMENT
main$rtcName$0 DB 069H
    DB  06eH
    DB  00H
    ORG $+13
main$rtcVarDesc DD 044H
    DD  04H
    DQ  FLAT:main$rtcName$0
    ORG $+48
main$rtcFrameData DD 01H
    DD  00H
    DQ  FLAT:main$rtcVarDesc
CONST   ENDS
;   COMDAT xdata
xdata   SEGMENT
$unwind$?Foo@@YAXXZ DD 05051c01H
    DD  010a030dH
    DD  07003001dH
    DD  05002H
xdata   ENDS
;   COMDAT xdata
xdata   SEGMENT
$unwind$?__empty_global_delete@@YAXPEAX_K@Z DD 05052d01H
    DD  01130316H
    DD  0700c0019H
    DD  0500bH
xdata   ENDS
;   COMDAT xdata
xdata   SEGMENT
$unwind$?__empty_global_delete@@YAXPEAX@Z DD 05052801H
    DD  010e0311H
    DD  070070019H
    DD  05006H
xdata   ENDS
; Function compile flags: /Odtp /RTCsu /ZI
; File c:\users\lukasz\documents\visual studio 2015\projects\breakpointtest\breakpointtest\breakpointtest.cpp
;   COMDAT main
_TEXT   SEGMENT
notworking$ = 4
in$ = 36
main    PROC                        ; COMDAT

; 15   : 

$LN3:
    push    rbp
    push    rdi
    sub rsp, 296                ; 00000128H
    lea rbp, QWORD PTR [rsp+32]
    mov rdi, rsp
    mov ecx, 74                 ; 0000004aH
    mov eax, -858993460             ; ccccccccH
    rep stosd

; 16   :    Foo();

    call    ?Foo@@YAXXZ             ; Foo

; 17   :    int notworking = 0;

    mov DWORD PTR notworking$[rbp], 0

; 18   :    int in = 23;

    mov DWORD PTR in$[rbp], 23

; 19   :    std::cin >> in;

    lea rdx, QWORD PTR in$[rbp]
    mov rcx, QWORD PTR __imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A
    call    QWORD PTR __imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z

; 20   :     return 0;

    xor eax, eax

; 21   : 

    mov edi, eax
    lea rcx, QWORD PTR [rbp-32]
    lea rdx, OFFSET FLAT:main$rtcFrameData
    call    _RTC_CheckStackVars
    mov eax, edi
    lea rsp, QWORD PTR [rbp+264]
    pop rdi
    pop rbp
    ret 0
main    ENDP
_TEXT   ENDS
; Function compile flags: /Odtp /RTCsu /ZI
; File c:\users\lukasz\documents\visual studio 2015\projects\breakpointtest\breakpointtest\breakpointtest.cpp
;   COMDAT ?Foo@@YAXXZ
_TEXT   SEGMENT
test$ = 4
?Foo@@YAXXZ PROC                    ; Foo, COMDAT

; 10   : 

$LN3:
    push    rbp
    push    rdi
    sub rsp, 232                ; 000000e8H
    mov rbp, rsp
    mov rdi, rsp
    mov ecx, 58                 ; 0000003aH
    mov eax, -858993460             ; ccccccccH
    rep stosd

; 11   :    TestGlobal = 289173;

    mov DWORD PTR ?TestGlobal@@3HC, 289173  ; TestGlobal, 00046995H

; 12   :    int test = 90823;

    mov DWORD PTR test$[rbp], 90823     ; 000162c7H

; 13   : 

    lea rsp, QWORD PTR [rbp+232]
    pop rdi
    pop rbp
    ret 0
?Foo@@YAXXZ ENDP                    ; Foo
_TEXT   ENDS
; Function compile flags: /Odtp /RTCsu /ZI
; File c:\users\lukasz\documents\visual studio 2015\projects\breakpointtest\breakpointtest\breakpointtest.cpp
;   COMDAT ?__empty_global_delete@@YAXPEAX_K@Z
_TEXT   SEGMENT
__formal$ = 224
__formal$ = 232
?__empty_global_delete@@YAXPEAX_K@Z PROC        ; __empty_global_delete, COMDAT

$LN3:
    mov QWORD PTR [rsp+16], rdx
    mov QWORD PTR [rsp+8], rcx
    push    rbp
    push    rdi
    sub rsp, 200                ; 000000c8H
    mov rbp, rsp
    mov rdi, rsp
    mov ecx, 50                 ; 00000032H
    mov eax, -858993460             ; ccccccccH
    rep stosd
    mov rcx, QWORD PTR [rsp+232]
    lea rsp, QWORD PTR [rbp+200]
    pop rdi
    pop rbp
    ret 0
?__empty_global_delete@@YAXPEAX_K@Z ENDP        ; __empty_global_delete
_TEXT   ENDS
; Function compile flags: /Odtp /RTCsu /ZI
; File c:\users\lukasz\documents\visual studio 2015\projects\breakpointtest\breakpointtest\breakpointtest.cpp
;   COMDAT ?__empty_global_delete@@YAXPEAX@Z
_TEXT   SEGMENT
__formal$ = 224
?__empty_global_delete@@YAXPEAX@Z PROC          ; __empty_global_delete, COMDAT

$LN3:
    mov QWORD PTR [rsp+8], rcx
    push    rbp
    push    rdi
    sub rsp, 200                ; 000000c8H
    mov rbp, rsp
    mov rdi, rsp
    mov ecx, 50                 ; 00000032H
    mov eax, -858993460             ; ccccccccH
    rep stosd
    mov rcx, QWORD PTR [rsp+232]
    lea rsp, QWORD PTR [rbp+200]
    pop rdi
    pop rbp
    ret 0
?__empty_global_delete@@YAXPEAX@Z ENDP          ; __empty_global_delete
_TEXT   ENDS
END

【问题讨论】:

您是否尝试过清理构建并重新编译? 难道不是因为未使用变量ololo 和编译器省略了优化的行吗?也许您需要更改优化级别。 它发生在调试构建中,就在创建项目之后。以防万一我尝试清洁。结果相同。 @deepmax 配置 > C++ > 优化优化设置为禁用 (/Od) 您是否收到任何错误消息? 【参考方案1】:

问题是在最新的 Windows 10 版本 (14251) 中恢复到 11099 后,它又开始工作了。

【讨论】:

【参考方案2】:

你可能会发现这个问题通过升级解决了。

当我在“Windows 10 Pro Insider Preview”中遇到同样的问题,甚至无法调试简单的“Hello world”时,通过更新 OS Build 14257 版本 160131 解决了这个问题。

【讨论】:

以上是关于Visual Studio 2015 更新 1 C++“断点绑定失败”的主要内容,如果未能解决你的问题,请参考以下文章

使用平台工具集 v120 (Visual Studio 2013) 在 Visual Studio 2015 中创建 C++/CLI 项目

Visual Studio 2015 许可证到期无法更新问题解决

加载 Visual Studio 2015 C++ 项目时出错,如何调试

Visual Studio 2015 更新 1 - 调试时没有 IIS Express 响应

Visual Studio 2015 更新 1 C++“断点绑定失败”

从 Visual Studio 2015 企业更新 1 面向 Windows XP