Search

'분류 전체보기'에 해당되는 글 113건

  1. 2007.02.28 Visual C++ Release버전 디버깅
  2. 2007.01.24 VCC source safe 사용법
  3. 2007.01.24 VC++ 확장자
  4. 2007.01.24 ActiveX 콘트롤 디버깅하기

Visual C++ Release버전 디버깅

Program Visual C++ 2007. 2. 28. 15:57 Posted by HisPark
엄청 좋은 팁하나 알려드릴께요..
어디서 퍼온겁니다.

함 해보세요..


<릴리즈 버젼 실행시 런타임 에러 찾아내기>

릴리즈 버젼 실행시 에러가 났을 경우..참 곤란했죠.

물론 고수님들께서야 이미 알고계시겠지만..

나름대로 엄청 가슴이 아팠습니다. 디버그모드는 괜찮은데..릴리즈는 에러를 때리구..어디서 나는지조차 모
르겠구...그때 쓸만한 잼있는 방법입니다.(물론 모르는 분에 한해서..^^)



Step 1.

프로젝트 세팅 들어가면..

Link라는 탭 선택해서..보면

Generate Mapfile이라구 있을꺼랍니다.

고걸 선택해서 샥 돌려보면..map파일이 release디렉토리에 생기죠.



Step 2.

그리구 나선..에러를 만들어 돌려보고, 어느 주소에서 에러가 났는지 캡춰

그리구서 map파일에 있는 주소랑 매치해 보는겁니다.

그럼 어느 함수에서 에러가 났는지 알 수 있죠~

'Program Visual C++' 카테고리의 다른 글

Screen Saver를 동작 못하게 함.  (0) 2007.03.22
Visual C++ Release 디버깅2  (0) 2007.02.28
VCC source safe 사용법  (0) 2007.01.24
VC++ 확장자  (0) 2007.01.24
ActiveX 콘트롤 디버깅하기  (0) 2007.01.24

VCC source safe 사용법

Program Visual C++ 2007. 1. 24. 14:28 Posted by HisPark

-정확하면서도 잦은 백업이 필요하다.
-실험작 프로그램을 만드는게 아니다.
-프로그램 디자인이 잘 되어 있다.
-프로그램 제작 기간이 다소 길다
-여러명 프로그래머가(보통 서너명 이상) 같이 동시에 작업한다.
-작업하는 컴퓨터들이 랜 등으로 연결되어 있다.
-복잡한 버전 관리를 해야 한다.
-어느 정도의 보안 관리가 필요하다.
-비주얼씨,비주얼베이직,비주얼인터데브(웹사이트만들때 이걸 쓰죠)를 쓴다.

이정도입니다. 복잡한가요? 쉽게 말하자면.. 보통 프로그래머 한둘이서 한두달
정도에 끝나는 작업이라면, 소스세이프를 안쓰는게 차라리 편할겁니다. 하지만,
프로젝트의 크기가 어느 정도 커지면, 쓰는게 좋다고 봅니다.

소스세이프는 서버와 클라이언트로 나뉘어집니다. 서버는 모든 소스를
데이터베이스에 저장합니다. 클라이언트는 프로그래머가 쓰는 컴퓨터에 하나씩
깔려있는 소프트웨어인데, 이것은 서버와 네트워크로 통신하면서 소스를 관리할
수 있게 해줍니다. 그러니까, 만약 동시에 작업하는 프로그래머가 5명이라면,
-서버 1개
-클라이언트 5개
이렇게 되겠죠. 그런데, 서버와 클라이언트는 한 개의 컴퓨터에 같이 쓰일 수
있습니다. 그러니까, 컴퓨터는 네트워크가 되는 5대가 필요하겠죠.
우선,서버를 깔아야겠죠. 비주얼 스튜디오 또는 비주얼 소스세이프 소프트웨어를
우선 갖고 있어야겠죠? 제가 비주얼스튜디오6를 쓰기 때문에,그걸 기준으로
설명하겠습니다. 따로 갖고 계신 분은 알아서 찾으시길..
우선,서버가 될 컴퓨터에 비주얼씨등을 깔고 나서,나중에 서버컴퍼넌트를 선택할
수 있습니다. 거기서 Sourcesafe server를 선택해서 설치하면 됩니다. 특별한
옵션은 없습니다. 그냥 full option으로 깔아도 됩니다. 그렇게 용량이 큰것도
아니니까요.
(이후부터는 여러가지 방법으로 설치할 수 있지만,간단한 방법을
제시해보겠습니다. 더 간단한 방법이나,더 안전한 방법 등이 있으면
귀뜸해주세요. 참고로,소스인사이트나 비주얼인터셉트같은 소프트웨어를 덤으로
깔아서 소스세이프를 강화할 수도 있습니다. 그런건 저도 써본적이 없기 때문에
잘 모르겠네요.)
다음에, 소스세이프가 깔려있는 폴더를 다른 컴퓨터에서 쓸수 있도록 공유를 해야
합니다. 읽기 쓰기 권한을 모두 주고요.
소스세이프는,정해진 사용자를 제외하고는 건들지 못합니다. 보안 중 하나죠.
그러니까,누가 그걸 쓸수 있는가를 정해야 합니다. 그러니까,시작 버튼을 눌러서
source safe를 선택하면.. source safe admin이라는게 있습니다.
administrator라고 하죠. 소스세이프 서버를 관리하는 사용자를 말합니다. 기본
암호는 없거나 admin입니다. 이제 들어가고 나면, 썰렁한 윈도우 하나 나옵니다.
거기서 메뉴를 선택해서 사용자를 추가합니다. 각 사용자들의 암호도 당연히
필요하죠. 그리고, 당연하겠지만,admin의 암호도 뭔가를 집어넣어야겠죠?
만약,네트워크가 NT 도메인이라면,NT 도메인에 등록된 각 사용자의 암호와
사용자명을 그대로 쓰면 편합니다.(왜인지는 아래에 적어놓겠습니다.) 각
사용자에 대해서는 프로젝트 읽기,쓰기 등의 권한이 있습니다. 일단은 여러가지
실험을 해봐야겠죠? 그러니까,가급적 모든 권한을 할당하세요.
서버는 이정도면 쫑입니다.

클라이언트를 이제 깔아야죠. 역시 비주얼씨등을 깝니다. 단,소스세이프 서버는
깔 필요가 없죠. 이제,서버에 공유시켰던 폴더를 그 컴퓨터에서 엽니다. 그리고,
그 안에 있는 netsetup.exe를 찾아보세요. (가끔 win32폴더 등에 그게 있기도
합니다. 상관없으니 일단 찾아보시길.) 찾았으면 실행! 역시 별다른 옵션이 없죠.
설치가 다 되었으면..비주얼씨를 실행해보세요.(비주얼베이직도 소스세이프와
연동되어 돌아가긴 하지만,여기서 비베를 쓰는 泳汰?거의 없는것 같더군요.)
위에서 NT도메인 궁시렁 한거 있죠? 그대로 한사람은 그냥 뜰겁니다. 하지만,
그렇지 않다면, 아마도 사용자명과 비밀번호를 묻는 박스가 나타날겁니다. 거기서
클라이언트 사용자의 이름과 비밀번호를 넣으세요.
다 떴으면,오른쪽 버튼을 툴바에서 눌러보세요. 그러면, source control이라는
새로운 툴바가 있을겁니다. 그걸 켜두세요. 유용하게 쓰입니다.
이제 소스세이프에 들어갈 프로젝트 하나를 만듭시다. appwizard등을 써서
프로젝트를 하나 만들거나,이미 있는 프로젝트를 여세요. 그다음에,project
view(왼쪽에 길쭉한 트리)에서 파일뷰 탭을 누른 다음에 프로젝트 파일이
있는데다가 오른쪽 버튼을 누르면..

add to source control

이라는 항목이 있습니다. 그걸 선택하면,소스세이프의 데이터베이스 트리가
나옵니다. 소스세이프의 데이터베이스는 마치 디렉토리 구조와 같습니다.
프로젝트 1개는 한개의 폴더에 해당하고,폴더 안에는 또 다른 폴더가 들어갈 수
있습니다. 루트 폴더의 이름은 $/입니다. 그러니까, 일단은 $/의 서브 프로젝트로
추가를 해야겠죠.
추가를 한 다음에,프로젝트뷰를 보면.. 원래 아이콘은 흰색이었죠? 근데 그게
회색으로 바뀌면서 옆에 빨간 v표시가 있을겁니다. 징그럽죠.. 여기서, 그게
뭔지를 설명하겠습니다.

마이크로소프트에서도 그렇게 하는지는 모르겠지만,프로그램을 만들때, 부득이한
경우가 아니면,소스 파일은 동시에 두명이 건드리지 않습니다. 그리고,각자가
맡은 파일 외에는 웬만하면 직접 건들지 않습니다. 만약 건드려야 한다면
버그레포팅이나 꾸지람(!) 등을 해서 그걸 건드리는 사람이 대신 건들게 합니다.
소스세이프에서는 이러한 기능을 소프트웨어 수준에서 처리하게 합니다. 그걸
어떻게 하느냐? 어떤 파일을 건들기 위해서는,그 파일은 "나만 쓸수 있다"는
독점권과 파일을 가져와야 합니다. 그리고, 그 파일을 작성하고 나서는 "이
파일은 다른 사람에게 전파되어야 한다"는 의미로 다시 파일을 갖다놔야 합니다.
파일을 소스세이프 서버로부터 가져오는것을 체크아웃(check out)이라고
하고,갖다 놓는것을 체크인(check in)이라고 합니다. 어떤 사람이 어떤 파일을
체크아웃하면,다른 사람은 자동으로 그 파일을 만질 수 없게 됩니다. 만지려고
소스에다가 글자 하나라도 입력하려고 하면 삥삥 소리나면서 글자가
안들어갑니다.

소스세이프가 연동된 비주얼씨에서는 그런 파일들을 아이콘으로 구별합니다. 하얀
파일 아이콘은 소스세이프에 묶이지 않은 파일이고,회색 아이콘은 묶인
아이콘입니다. 회색 아이콘 옆에 빨간 v표시가 있으면 그건 check out된 것이고,
그렇지 않으면 check in된 것입니다. 우선은 모든 파일을 check in 하죠. check
in 하는 방법은,프로젝트 뷰에서 파일을 선택한다음 아까 툴바의 check in버튼을
누르거나,소스세이프 익스플로러(소스세이프 클라이언트의 이름입니다.)에서
프로젝트를 선택한 다음 통째로 체크인할수있습니다. 하지만,일단은
프로젝트뷰에서 파일을 하나하나 다 선택한다음 체크인을 하세요.

옆의 빨간 v가 없어졌을겁니다. 이제,그 파일들의 방금 체크인된 것들은 서버에
저장되었고,다른사람들은 그것들을 가져다가 쓸수 있습니다.

이제,그 소스 파일 중 하나를 열어서,글자를 입력하려고 해보세요. 박스가
튀어나옵니다. "이 파일을 체크아웃해서 쓸거냐?"는 질문이죠. "예"를 선택하면
체크아웃을 합니다. 일단은 그냥 냅두세요. 편의상 이 클라이언트는 컴1이라
부르죠.

이제,다른 컴퓨터(편이상 컴2라 부르죠.)에도 아까 언급했던 식으로 클라이언트를
설치하세요. 거기서는 아까 서버에 넣은 소스를 가져와서 작업해야겠죠.
소스세이프익스플로러를 띄우세요. 그러면,아까 넣어둔 프로젝트 폴더가
있을겁니다. 그걸 선택한다음,set working folder버튼을 누르세요. 서버에 있는
폴더는 파일 폴더가 아닙니다. 그렇기 때문에, 그것에 대칭되는 폴더를 각자의
컴퓨터에 마련을 해야 합니다. 그게 working folder입니다. 웬만하면 working
folder의 이름과 프로젝트의 이름을 같게 하는게 좋습니다. 안그러면 중간에
짜증나는 일이 생기죠.

만들면,서브폴더를 만들건지를 묻습니다. 만드는게 좋습니다. 이제, 서버에서
파일들을 가져와야겠죠. 그렇지만,당장 편집할건 아니고,서버에 저장되어 있는
것들만 가져올 뿐입니다. 그걸 하기 위해서는 get latest version이라는것을
선택하면 됩니다. 그러면,파일들이 클라이언트에 복사가 됩니다. 그걸
비주얼씨에서 프로젝트째로 열면,회색 아이콘으로 나올겁니다. v표시는 없죠?

아까 아까 클라이언트에서 체크아웃 하신거 아시죠? 그 파일을 열고 뭔가를
입력해보세요. 삥삥 소리나면서 글자가 안들어갈겁니다. 다른 사람이 이미 그
파일을 체크아웃했기 때문입니다. 그걸 쓰기 위해서는 그걸 체크아웃한 泳汰? 다시 체크인을 하거나 체크아웃을 취소해야 합니다.(만약,체크아웃했는데,필요가
없어서 취소하는걸 undo check out이라고 합니다.그러면,소스가 원상복구되죠.)
일단은 체크인을 합시다. 이제,컴2에서 그 파일을 체크아웃하세요. 여전히
삥삥대죠? 비주얼스튜디오의 번거로운 점 하나입니다. 비주얼스튜디오와
소스세이프의 연동관계까지는 좋지만,자기 컴퓨터 바깥에서 일어나는 일에
대해서는 연동되지 않습니다. 그렇기 때문에, 비록 체크인이 된
파일이더라도,그런 상황을 자동으로 알아내지 않습니다. 소스컨트롤 툴바에 보면
느낌표 아이콘이 있습니다. refresh라는 버튼이죠.. 그걸 눌러줘야 외부에서
일어난 다시 검사합니다. 자, refresh버튼을 누른 다음에 다시 소스에다가 입력을
해보세요. 아까 체크아웃할거냐는 질문을 던지죠? 체크아웃을 해보세요. 컴1에서
바꿨던 부분이 역시 튀어나오죠? 왜냐하면 컴1에서 체크인을 했기
때문에,데이터베이스에 있는 그 파일은 컴1에서 변경한 것이 있기 때문입니다.
그런데, 만약 그 파일을 체크아웃하지 않고 그냥 최근판으로 가져오고 싶을 때가
있습니다. 그럴때는 체크아웃대신에 get latest version을 선택하면 됩니다.

소스세이프의 장점 중 하나는,소스 파일의 변경 상황을 모조리 저장한다는겁니다.
그러니까,어떤 파일을 100번 정도 체크인했다면,그 100번 체크인한 소스가 모조리
저장됩니다. 용량 엄청 먹을것 같다고요? 소스세이프는 나름대로의 소스 저장
방식을 갖고 있습니다. 그렇기 때문에,예상보다는 훨씬 적은 양의 하드 디스크를
차지합니다. 예를 들어,제가 쓰고 있는 소스세이프 서버의 데이터베이스는 약
2년간 써왔는데, 전체 용량이 20메가입니다. 어카이빙이라고 해서,소스를 한개
파일로 압축해주는 기능이 있는데,그걸 쓰면 4메가가 됩니다. 소스 전체 합치면
1메가 좀 넘으니까,소스 크기가 일정 속도로 늘었다는 가정하게 계산해보면,
0.5메가(일정 속도로 늘었다고 가정했으니까)*365(하루 한번 체크인했다고
가정)*2하면.. 365메가죠? 그렇지만 실제로는 20메가..(정확하게 몇번
체크인했는지 등을 뽑아내는 방법은 모르기에,이렇게 어림짐작해봅니다.)
그게 어떻게 나오는지 해봅시다. 소스세이프익스플로러에서 프로젝트 폴터를
선택한다음 view history를 선택해보세요. 그러면,지금까지,언제 누가 어떤 소스
파일을 어떻게 했다는게 좍 나옵니다. 물론, 옛날 소스 파일을 가져올 수도
있습니다.

이게 소스세이프의 기본적인 기능입니다. 이 외에도, 소스세이프의 기능에는..
branching/merging(한개 이상의 소스 파일 버전을 여러 갈래로 나눠서 여러
사람이 작업하다가 나중에 한꺼번에 합치는 방법)
back up,roll back(어느 날짜 이전의 소스를 가져오거나 그 날짜로 소스를
되돌리는 방법.. 심각한 문제가 발생했을때 이렇게 소스를 복구할 수 있죠.)
command line 사용(소스 파일이 한두개가 아니면,배치파일 등을 만들어서 어느
정도 자동화할 수 있습니다.)
difference(두 개 이상의 소스 파일이나, 한개 소스 파일의 지나간 버전간의 소스
내용의 차이를 구별할 수 있습니다.)
label(체크인할때 넣는 주석과는 달리,프로젝트 통째로 메이저 버전을 넣어서
엮는 방법. 버전 1.1,버전 1.2등 릴리즈가 작성되었을때 이걸 해두면 편합니다.)
report(윗사람한테 어떤 작업하고 있었는지 보고 정도는 해야겠죠?)
share(한개의 파일이 변하면,그게 다른 프로젝트에도 복사되게하는 기능)
webdeploy(웹페이지소스를 웹서버에 올릴때 쓰는 기능. 안써봐서 모르겠네요.)
가 있습니다. 이건 제 강좌를 이해하시면,소스세이프 설명서만 읽어도 충분히
이해갈 수 있는 것들이니까,굳이 어떻게 쓰는건진 설명하지 않겠습니다.

'Program Visual C++' 카테고리의 다른 글

Visual C++ Release 디버깅2  (0) 2007.02.28
Visual C++ Release버전 디버깅  (0) 2007.02.28
VC++ 확장자  (0) 2007.01.24
ActiveX 콘트롤 디버깅하기  (0) 2007.01.24
VC++ 다중 프로잭트 종속관계 설정  (0) 2007.01.24

VC++ 확장자

Program Visual C++ 2007. 1. 24. 13:28 Posted by HisPark
새로운 프로젝트를 만들면 프로젝트 폴더에 여러가지 파일이 생성됩니다. 각 파일의 의미를 확장자 별로 알아봅니다.


[확장자] [의미]
.APS     AppStudio file  
.BSC     Browser file .SBRs combined into 1 .BSC.
.CLW     ClassWizard file  
.ILK     Incremental linker file
.NCB     Contains the ClassView information Added in 4.0; delete if you have problems.
.PCH     Pre-compiled header file  
.PDB     Debugging info /Z7 affects this.
.RES     RC "object" file Linked into .EXE.
.SBR     Browser info for 1 file Combined into .BSC.
.VCP     Visual C++ state file  

참고
VC++ Frequently Asked Questions

ActiveX 콘트롤 디버깅하기

Program Visual C++ 2007. 1. 24. 13:02 Posted by HisPark
1. 메뉴에 있는 "Project"를 열고, Project->Setting->Debug 탭으로 이동합니다.

Category에서 "General"을 선택합니다.

2. Excutable for debug session: 에는 디버그로 실행할 웹브라우저의 실행화일 경로명을 적습니다.
3. Program arguments: 에는 ActiveX 콘트롤을 심어놓은(즉 <Object> 태그가 들어있는) HTML 파일의
경로명을 적습니다.

그리고 디버깅을 시작하면 디버깅 심볼들을 로딩하며 브레이크 포인트도 잘 먹습니다.

4. TRACE("")문은 동작하지 않으며 ATLTRACE("")을 써야 합니다. 다음과 같이 써주면 되겠죠.

ATLTRACE(_T("Server Name: %s \r\n"), m_strUpdateServerName.c_str());

5. ATL/COM으로 모듈 작성시에는 CreateProcess()보다 _beginthread()나 _beginthreadex()를
쓰시는게 더 좋습니다. CreateProcess()의 경우에 스레드가 끝날때 제대로 CRT 스택을 uninitialize하지
못한다고 합니다.