Game Dev/Work Log

정규표현식을 이용하여 대입문 찾기

AKer 2011. 7. 1. 11:38
반응형
상황
어디선가 글로벌 변수에 이상한 값을 대입한다. (글로벌 변수의 효용성/허용성은 논외)
어디서, 누가 값을 대입하는지 찾고 싶다.

시도 1
멤버변수는 그나마 쓰는 곳이 한정되어 있지만 (public이 아닐 경우 자기 클래스 내부) 글로벌 변수는 많은 파일과 범위에서 사용된다. 이 때 VS에서 "g_pValue"를 그대로 찾으면 다음과 같은 쓰레기 정보들도 같이 검색된다. 약 5만 7000여 검색 결과가 나올듯...

g_pValueFake = 어쩌고; // 찾기 싫어!
if (g_pValue) // 찾기 싫어!
g_pValue->Func(); // 싫다고! 


시도 2
그래서 이번에는 "g_pValue =" 으로 검색을 해본다. 수는 줄었지만 제대로 될리가 없다. (이 때 찾았으면 행복한 사람!)

if (g_pValue == NULL)
어쩌고;


그리고 이 경우 \t 입력이나 공백을 여러개 입력하는 것이 검색되지 않는다.

g_pValue             = 어쩌고; // 찾지 못함
g_pValue = 어쩌고; // 찾지 못함
g_pValue=어쩌고; // 찾지 못함 


시도 3
정규표현식을 사용해서 찾아본다. 처음에는 식이 좀 복잡하지만 알고 보면 쉬운 남자... VS의 검색 윈도우에서 Regular Expression을 체크한 후 아래 내용을 그대로 친다.

g_pValue\:b*=[^=]



대충 설명하자면

1. g_pValue : 우리가 원하는 변수 이름
2. \:b : 탭이나 공백을 뜻하는 문자 (VS 사용하려면 \를 붙어야 하는듯)
3. * : 바로 앞의 문자가 0번 이상 존재하는 패턴을 찾음 (이 경우 공백이나 탭이 0개 이상)
4. = : 대입 연산자
5. [^=] : 대괄호는 그룹을 나타내고, ^는 바로 뒤의 문자를 제외 (따라서 경우 =를 제외한 모든 글자)

=[^=] 대신  ={1}을 써도 될 것 같은데 VS6의 버그인지 내가 제대로 쓰지 못하는 것인지 제대로 작동하지 않는다. 더 알아봐야겠지만 귀찮아서 업무가 바빠서 검색을 중단한다.

 
반응형

'Game Dev > Work Log' 카테고리의 다른 글

C#으로 Thread Work Pool 생성하기  (0) 2011.07.01
Havok 적용하기  (0) 2011.07.01
_msize, _countof  (0) 2011.04.19
#include "stdafx.h" 이전의 모든 코드는 무시  (0) 2011.03.16