문제

이 기능이 있다고 가정합니다.

std::string Func1(std::string myString)
{
   //do some string processing 
   std::string newString = Func2(myString)
   return newString;  
}

언제 조건부 휴식을 설정합니까? newString 특정 값이 있습니까? (소스를 변경하지 않고)

조건 설정 newString == "my value"

"오버로드 된 연산자를 찾을 수 없음"오류로 중단 점이 비활성화되지 않았습니다.

도움이 되었습니까?

해결책

일부 검색은이 작업을 수행하는 방법을 찾지 못했습니다. 제안 된 대안은 테스트를 코드에 넣고 표준 중단 점을 추가하는 것입니다.

if (myStr == "xyz")
{
    // Set breakpoint here
}

또는 개별 캐릭터 비교에서 테스트를 구축합니다. 문자열에서 개별 캐릭터를 보는 것조차도 약간 칙칙합니다. Visual Studio 2005에서 나는 다음과 같은 멤버 변수를 파헤쳐 야했습니다.

myStr._Bx._Buf[0] == 'x' && myStr._Bx._Buf[1] == 'y' && myStr._Bx._Buf[2] == 'z'

이러한 접근법 중 어느 것도 매우 만족스럽지 않습니다. 표준 라이브러리의 유비쿼터스 기능에 더 잘 액세스해야합니다.

다른 팁

Visual Studio 2010/2012에는 훨씬 쉬운 방법이 있습니다.

ANSI에서 찾고있는 것을 달성하려면 다음을 사용하십시오.

strcmp(newString._Bx._Ptr,"my value")==0 

그리고 유니 코드에서 (뉴스 스트링이 유니 코드 인 경우) 이것을 사용하십시오.

wcscmp(newString._Bx._Ptr, L"my value")==0 

비교하는 것보다 더 많은 일이 있습니다. 여기에서 더 많이 읽을 수 있습니다.

http://blogs.msdn.com/b/habibh/archive/2009/07/07/new-visual-studio-debugger-2010-feature-for-cc-cc-cc-using-string-functions-in-conditional- Breakpoints.aspx

VS2017에서 당신은 할 수 있습니다

strcmp(newString._Mypair._Myval2._Bx._Buf,"myvalue")==0

Brad의 답변과 비슷한 것을 사용 하여이 문제를 해결해야했지만 디버그 브레이크 () 코드에서 바로 위반하려면) 때때로 편집/재 컴파일/약간의 코드를 다시 실행하는 것은 너무 시간이 많이 걸리거나 불가능합니다.

운 좋게도 STD :: 문자열 클래스의 실제 멤버로 들어가는 것은 분명히 가능합니다. 한 가지 방법이 언급됩니다 여기 - 그는 구체적으로 vs2010을 호출하지만 이전 버전에서는 개별 숯에 수동으로 액세스 할 수 있습니다. 따라서 2010 년을 사용하는 경우 Nice 만 사용할 수 있습니다. strcmp() 기능 등 (더 많은 정보), 그러나 당신이 나와 같고 여전히 2008 년 이하의 경우, 당신은 다음과 같은 내용 조건부를 설정하여 울퉁불퉁하고 끔찍하지만 기능적인 대안을 제시 할 수 있습니다.

strVar._Bx._Ptr[0] == 'a' && strVar._Bx._Ptr[1] == 'b' &&
   strVar._Bx._Ptr[2] == 'c'

Strvar의 처음 세 문자가 "ABC"인 경우 깨뜨립니다. 물론 추가 숯으로 계속 갈 수 있습니다. 못생긴 ..하지만 지금은 약간의 시간을 절약했습니다.

vs2012 :

나는 방금 아래 조건을 사용했기 때문에 newString._Bx._Ptr (오바도의 대답에서와 같이) 불법 기억을 참조했습니다

strcmp( newString._Bx._Buf, "my value")==0

그리고 그것은 효과가있었습니다 ...

@obwando (거의)에는 해결책이 있습니다, 그러나 여러 의견이 바르게 지적한 바와 같이 실제 버퍼는 문자열 크기에 따라 다릅니다. 나는 16이 임계 값이라고 본다. 적절한 버퍼 작업에서 STRCMP에 크기 점검을 선제합니다.

newString._Mysize < 16 && strcmp(newString._Bx._Buf, "test value") == 0

또는

newString._Mysize >= 16 && strcmp(newString._Bx._Ptr, "ultra super long test value") == 0

VS2017에서 조건을 다음과 같이 설정할 수있었습니다.

strcmp(&newString[0], "my value") == 0

VS2015에서는 할 수 있습니다

newstring[0]=='x' && newString[1]=='y' && newString[2]=='z'

문자열 비교는 문자를 비교하는 것보다 더 잘 작동합니다

strcmp(name._Mypair._Myval2._Bx._Buf, "foo")==0

이것은 작동하지만 사용 및 오류가 발생하기 쉬운 매우 불편합니다.

name._Mypair._Myval2._Bx._Buf[0] == 'f' && 
name._Mypair._Myval2._Bx._Buf[1] == '0' && 
name._Mypair._Myval2._Bx._Buf[2] == '0'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top