std :: string으로 조건부 중단 점을 만드는 방법
이 기능이 안심 가정합니다.
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
그리고 유니 코드에서 (newString이 유니 코드 인 경우) 다음을 사용하십시오.
wcscmp(newString._Bx._Ptr, L"my value")==0
비교하는 것보다 할 수있는 일이 더 많으며 여기에서 더 많은 것을 읽을 수 있습니다.
VS2017에서는 할 수 있습니다.
strcmp(newString._Mypair._Myval2._Bx._Buf,"myvalue")==0
Brad의 대답과 방법은 사용 하여이 문제를 해결해야하지만 ( 코드에서 바로 분리하기 위해 DebugBreak () 사용하여 편집) 약간의 코드를 / 재 처리 / 재실행 할 수 없습니다. .
운 좋게도 std :: string 클래스의 실제 멤버로 스펠링하는 것이 가능합니다. 여기에 한 가지 방법이 있습니다. VS2010을 수동으로 언급 했지만 이전 버전에서는 수동으로 문자에 액세스 할 수 있습니다. 2010 년을 사용하는 경우 멋진 strcmp()
기능 등을 사용할 수 있습니다. ( 추가 정보) .하지만 저와 같고 2008 년 이전 버전을 사용하고 권한이있는 파일 고 끔찍하지만 기능적인 대안을 생각할 수 있습니다. 중단 점 조건을 다음과 같이 설정하여 :
strVar._Bx._Ptr[0] == 'a' && strVar._Bx._Ptr[1] == 'b' &&
strVar._Bx._Ptr[2] == 'c'
strVar의 처음 세 문자가 "abc"이면 중단됩니다. 물론 추가 문자로 계속 진행할 수 있습니다. 못 생겼어 .. 근데 시간이 좀 절약 됐어.
VS2012 :
newString._Bx._Ptr
OBWANDO의 답변에서와 같이 불법 메모리를 참조 때문에 아래 조건을 사용했습니다.
strcmp( newString._Bx._Buf, "my value")==0
그리고 작동했습니다 ...
@OBWANDO (거의)에는 많은 것이 있습니다. 나는 16이 문턱이라고 본다. 적절한 크기 검사를 추가하면 작동합니다.
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'
다음 c_str()
과 같이 사용하여 ac kK로 변환 할 수 있습니다 .
$_streq(myStr.c_str(), "foo")
참고 URL : https://stackoverflow.com/questions/1740858/how-to-create-conditional-breakpoint-with-stdstring
'ProgramingTip' 카테고리의 다른 글
디렉토리가 아닌 파일에 대한 chmod 변경 (0) | 2020.11.10 |
---|---|
iPhone 및 WireShark (0) | 2020.11.10 |
PHP를 사용하여 다음 문자를 가장 쉽게 사용하는 방법 (0) | 2020.11.10 |
PowerShell에서 출력을 $ null로 리디렉션하지만 변수가 설정되어 있는지 확인 (0) | 2020.11.10 |
Rails : 호출을 호출하지 않고 모델 속성 업데이트 (0) | 2020.11.10 |