변수에 시계를 배치하고 해당 값이 변경 될 때만 Visual Studio가 중단되는 방법이 있습니까?
까다로운 상태 문제를 훨씬 쉽게 찾을 수 있습니다.
이것을 할 수 있습니까?
중단 점 조건에는 여전히 중단 점 세트가 필요하며 시계를 설정하고 Visual Studio에서 상태 변경시 중단 점을 설정하도록합니다.
변수에 시계를 배치하고 해당 값이 변경 될 때만 Visual Studio가 중단되는 방법이 있습니까?
까다로운 상태 문제를 훨씬 쉽게 찾을 수 있습니다.
이것을 할 수 있습니까?
중단 점 조건에는 여전히 중단 점 세트가 필요하며 시계를 설정하고 Visual Studio에서 상태 변경시 중단 점을 설정하도록합니다.
답변:
Visual Studio 2005 메뉴에서 :
디버그 -> 새로운 중단 점 -> 새로운 데이터 중단 점
시작하다:
&myVariable
코드에서 명시 적으로 중단하도록 선택할 수도 있습니다.
// Assuming C#
if (condition)
{
System.Diagnostics.Debugger.Break();
}
MSDN에서 :
디버거 브레이크 : 디버거가 연결되어 있지 않으면 사용자에게 디버거를 연결할지 묻는 메시지가 표시됩니다. 그렇다면 디버거가 시작됩니다. 디버거가 연결되어 있으면 디버거에 사용자 중단 점 이벤트가 표시되고 디버거는 마치 디버거 중단 점에 도달 한 것처럼 프로세스 실행을 일시 중단합니다.
그러나 이것은 단지 폴백입니다. 다른 의견에서 설명한 것처럼 Visual Studio에서 조건부 중단 점을 설정하는 것이 더 좋습니다.
정말 오래된 게시물이지만 누군가 알지 못하는 경우 ...
에서 비주얼 스튜디오 2015 , 당신은에 중단 점을 배치 할 수 있습니다 set
자동 구현 속성의 접근 및 디버거는 속성이 업데이트 될 때 중단됩니다
public bool IsUpdated
{
get;
set; //set breakpoint on this line
}
최신 정보
대안 적으로; @AbdulRaufMujahid은 자동 구현 속성은 한 줄에있는 경우, 당신은 위치에 커서를 할 수 있다는 의견에서 지적 get;
이나 set;
와 충돌 F9
및 중단 점을 따라 배치됩니다. 좋은!
public bool IsUpdated { get; set; }
다음 선언을 가진 A라는 클래스가 있다고 가정하십시오.
class A
{
public:
A();
private:
int m_value;
};
누군가 "m_value"값을 수정할 때 프로그램을 중지하려고합니다.
클래스 정의로 이동하여 A의 생성자에 중단 점을 두십시오.
A::A()
{
... // set breakpoint here
}
프로그램을 중지하면 :
디버그-> 새로운 중단 점-> 새로운 데이터 중단 점 ...
주소 : & (this-> m_value)
바이트 수 : 4 (int는 4 바이트이므로)
이제 프로그램을 재개 할 수 있습니다. 값이 변경되면 디버거가 중지됩니다.
상속 된 클래스 나 복합 클래스에서도 동일한 작업을 수행 할 수 있습니다.
class B
{
private:
A m_a;
};
주소 : & (this-> m_a.m_value)
검사하려는 변수의 바이트 수를 모르는 경우 sizeof 연산자를 사용할 수 있습니다.
예를 들면 다음과 같습니다.
// to know the size of the word processor,
// if you want to inspect a pointer.
int wordTam = sizeof (void* );
"Call stack"을 보면 변수 값을 변경 한 함수를 볼 수 있습니다.
WPF를 사용하는 경우 WPF Inspector 라는 멋진 도구가 있습니다.
WPF 앱에 연결되어 모든 속성으로 컨트롤의 전체 트리를 표시하며 속성 변경 사항을 위반 할 수 있습니다.
그러나 슬프게도 나는 당신이 어떤 속성이나 변수로 똑같이 할 수있는 도구를 찾지 못했습니다.
Visual Basic 6.0을 사용하여 설명한 방식을 기억합니다 . Visual Studio에서 지금까지 찾은 유일한 방법은 중단 점 조건 을 지정하는 것 입니다.
Peter Mortensen은 다음과 같이 썼습니다.
Visual Studio 2005 메뉴에서 :
디버그-> 새로운 중단 점-> 새로운 데이터 중단 점
입력 : & myVariable
추가 정보:
분명히, 시스템은 메모리에서 어떤 주소를보아야하는지 알아야합니다. 따라서 정상적인 중단 점을 초기화 myVariable
(또는 myClass.m_Variable
)로 설정하십시오. 시스템을 실행하고 중단 점에서 멈출 때까지 기다리십시오. -이제 메뉴 항목이 활성화되었으며을 입력하거나을 입력 &myVariable
하여 인스턴스를 볼 수 있습니다 &myClass.m_Variable
. 이제 주소가 잘 정의되었습니다.
이미 주어진 해결책을 설명하여 잘못했을 때 죄송합니다. 그러나 의견을 추가 할 수 없었으며 이에 관한 의견이있었습니다.
DebugBreak () 함수를 영리하게 사용할 수 있습니다 .
myVariable
사용 된 위치를 추적하고 사용 후 보조 previousValue
변수 에 값을 저장 한 다음 myVariable!=previousValue
; 그러면 어떤 코드 블록 myVariable
이 변경 되었는지 알 수 있습니다 . 그러나 AShelly의 솔루션이 가장 좋습니다.
2019 년 업데이트 :
이는 현재 .Net Core 3.0 이상의 Visual Studio 2019 Preview 2에서 공식적으로 지원됩니다. 물론 IDE의 Preview 버전을 사용할 경우 잠재적 인 위험에 대해 몇 가지 생각을해야 할 수도 있습니다. 가까운 시일 내에 공식 Visual Studio에 포함될 것이라고 생각합니다.
다행히 데이터 중단 점은 이제 Visual Studio 2019 Preview 2에서 .NET Core (3.0 이상)에서 사용할 수 있으므로 더 이상 C ++ 전용이 아닙니다!