분류 전체보기 (328)
.NET (111)
S/W tip (35)
etc (63)
DB (34)
HOT item~! (48)
Disign pettens (4)
UX (6)
나의 S/W (2)
개발관련 이슈 (16)
Diary (1)
웹플러스 (1)
calendar
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
tags
archive
link
ColorSwitch 00 01 02
▣  JS 객체 - .NET/JavaScript - 2011. 7. 11. 10:09

출처 : http://lahuman.blog.me/60015228929

Window 객체

 

window 객체는 웹 브라우저가 제공하는 객체 중에 최상위 객체로 브라우저 윈도우를 대표합니다. window 객체는 객체 계층 구조상 최상위 객체 이므로, 대부분 Window 속성들을 참조할 때 속성 앞에 window를 붙이지 않아도 됩니다. 또는 window 대신에 self나 this를 이용해도 됩니다. window 객체가 제공하는 defaultStatus라는 속성을 이용하고자 할 때 다음 참조는 동일한 결과를 가집니다.

 

window.defaultStatus

defaultStatus

self.defaultStatus

this.defaultStatus

 

그러나 예외로, window 객체의 메소드 중에 open() 과 close() 메소드를 이용할때는 반드시 window라는 객체 이름을 이용해야 합니다(예를 들면, window.open(), window.close()). rm 이유는 document 객체도 open() 과 close() 메소드를 갖고 있기 때문입니다. window 객체는 top,  parent 또는 name과 같은 속성을 통해 참조될수 있습니다.

 

속성

다음과 같은 다양한 속성들을 제공합니다.

 

▶ client

브라우저에 대한 정보를 얻을 때 이용합니다.

 

▶ closed

부울값을 갖는 읽기 전용 속성으로, 참조된 윈도우가 닫혔는지(closed=true), 아니면 열려 있는지(closed=false)를 알려줍니다.

 

▶ defaultStatus

브라우저의 상태바에 나타나는 텍스트를 지정하거나 리턴합니다. 이 속성은 상태바에 항상 텍스트가 나타난다는 점에서 status 속성과 차이점이 있습니다. status 속성은 상태바에 나타나는 텍스트를 일시적으로 변경하기위해 사용될수 있습니다. Internet Explorer는 현재 이 속성을 디폴트 상태바 텍스트로 설정하고 있으므로 status 속성과 마찬가지로 작동됩니다.

 

▶ dialogArguments

이 속성은 참조된 모달 대화상자 윈도우(modal dialog window)가 만들어질 때 사용된 인자들을 리턴합니다. 이 속성은 showModalDialog 메소드를 이용하여 만들어진 윈도우에만 적용됩니다.

 

▶ dialogHeight

참조된 모달 대화상자 윈도우의 높이를 알려줍니다.

 

▶ dialogLeft

데스크탑의 좌측 경계선을 기준으로, 참조된 모달 대화상자 윈도우의 수평 오프셋(offset)을 알려줍니다.

 

▶ dialogTop

데스크탑의 상단 경계선을 기준으로, 참조된 모달 대화상자 윈도우의 수직 오프셋을 알려줍니다.

 

▶ dialogWidth

참조된 모달 대화상자 윈도우의 폭을 알려줍니다.

 

▶ document

이 속성은 참조된 윈도우의 Document 객체를 참조합니다. Document 객체는 브라우저의 윈도우에 나타나는 현재 문서에 대한 정보를 갖고 있는 속성들을 보유하고 있습니다. 예를 들어, 다음 코드는 현재 윈도우의 부모 윈도우에 있는 문서의 배경색을 변수 vColour에 할당합니다.

 

vColour=parent.document.bgColor

 

▶ event

이 속성은 Event 객체를 참조합니다.

 

▶ frames

이 속성은 Frames 배열을 참조합니다. 문서가 프레임으로 구성된 문서일 때, 각각의 프레임에는 0부터 시작되는 인덱스가 설정됩니다. 예를 들어, <FRAME> 정의에서 세 번째로 정의된 프레임의  location 객체에 접근하려면, 다음과 같은 코드를 이용할 수 있습니다.

 

vLocation=window.frames(2).location

 

▶ history

사용자들이 최근에 방문했던 URL 리스트들을 리턴합니다.

 

▶ length

윈도우 객체 내의 프레임 수를 리턴합니다. 다음 코드는 HelpWin이라는 이름을 갖는 윈도우(단일 프레임 또는 window.open() 메소드를 이용하여 만들어진 윈도우) 내의 프레임 수를 변수 vFrames에 저장합니다.

 

vFrames=HelpWin.length

 

▶ location

현재 문서의 위치에 대한 정보를 지정하거나 리턴합니다.

 

▶ name

읽기 전용 속성으로, 윈도우 객체의 이름을 리턴합니다.

 

▶ navigator

Navigator 객체를 참조합니다.

 

▶ opener

(window.open() 메소드를 이용하여) 현재 윈도우를 만든 윈도우 이름을 리턴합니다. 이 속성은 현재 윈도우를 연 윈도우나 문서의 속성들에 액세스하고자 할 때 이용하면 좋습니다. 다음과 같은 코드는 새로운 윈도우를 만든 이전의 윈도우를 자동으로 닫게 합니다.(예외로, 최초의 브라우저 윈도우는 confirm 대화상자를 통해 사용자 확인이 있어야 닫을수 있습니다.)

 

self.opener.close()

 

▶ parent

현재 윈도우가 프레임셋의 일부인 경우, 현재 윈도우의 부모 객체를 리턴합니다. 만일 현재 윈도우가 프레임셋의 일부가 아니라면, 이 속성은 self 속성처럼 작동하여 현재 윈도우 객체를 리턴합니다. 예를 들어, 다음 코드는 현재 윈도우의 부모 윈도우 이름을 변수 vStrParentName에 저장합니다.

 

vStrParentName=parent.name

 

▶ returnValue

showModalDialog 메소드로 만들어진 모달 대화상자 윈도우의 리턴 값을 리턴합니다.

 

▶ screen

Screen 객체에 대한 참조를 제공합니다.

 

▶ self

현재 윈도우의 윈도우 객체를 리턴합니다. 예를 들어, 다음과 같은 스크립트를 문서 스크립트에 작성하면 웹 브라우저의 상태바에 "교육용 타이틀 제작"이라는 텍스트가 나타납니다.

 

self.status ="교육용 타이틀 제작";

 

위 코드는 다음과 같이 작성해도 동일한 결과를 가집니다.

 

window.status ="교육용 타이틀 제작";

 

▶ status

브라우저 윈도우의 상태바에 나타나는 텍스트를 변경하기위해 사용합니다. 마우스가 문서 내의 이미지나 버튼, 링크 등의 위에 올라가거나 할 때 이 속성을 이용하면 좋습니다. 다음 코드는 상태바에 "교육용 CD 타이틀 제작"이라는 텍스트가 나타나게 합니다.

 

self.status ="교육용 CD 타이틀 제작"

 

문서가 프레임셋으로 구성되었을 경우에는 self.status를 이용하여 상태바의 텍스트를 변경할 수 없습니다. 이럴때는 top.status를 이용하여 텍스트를 변경할 수 있습니다.

 

▶ top

최상위 브라우저 윈도우의 윈도우 객체를 리턴합니다. 다음 코드에서 변수 vLocation에는 최상위 윈도우에 있는 문서의 URL이 할당됩니다.

 

vLocation=top.location

 

▶ window

self처럼 현재 윈도우를 참조합니다.

 

메소드

다음은 window 객체가 제공하는 메소드입니다.

 

▶ alert()

사용자에게 메시지를 전달하는 대화상자를 보여줍니다. 인자로는 문자열 또는 다른 객체의 속성 등이 올수 있습니다. 다음 코드는 메시지 상자에 "안녕하세요! 좋은 아침입니다."라는 메시지를 보여줍니다.

 

alert("안녕하세요! 좋은 아침입니다.")

 

▶ back()

참조된 윈도우의 히스토리 리스트에서 바로 이전 윈도우로 돌아가도록 합니다.

 

▶ blur()

특정 윈도우 객체로부터 강제로 포커스를 제거합니다. 다음은 현재 윈도우의 포커스를 제거하는 코드 입니다..

 

self.blur()

 

다음은 새로 만들어진 HelpWin이라는 이름을 갖는 윈도우로부터 포커스를 제거합니다.

 

HelpWin.blur()

 

▶ clearInterval()

상응하는 setInterval 메소드를 취소시킵니다. 사용법은 다음과 같습니다.

clearInterval(MyInterval)

 

▶ clearTimeout()

setTimeout 메소드의 ID를 참조하여 지정된 setTimeout 메소드를 제거하기위해 사용합니다.

 

clearTimeout(MyTimeOut)

 

▶ close()

지정된 윈도우를 닫습니다. 이 메소드를 사용할때는 항상 window.close() 형태로 이용해야 합니다. parent, self, top 또는 name 속성 등을 이용하여 어떠한 윈도우든지 이 메소드를 이용하여 닫을수 있습니다. window.close() 메소드는 window.open() 메소드를 이용하여 만든 윈도우는 자동으로 닫을수 있지만, 다른 형태로 열린 윈도우를 닫으려고 하면 confirm 대화상자를 통해 사용자의 확인을 받아야 합니다. 다음은 현재 윈도우를 닫는 코드 입니다.

 

self.close()

 

▶ confirm()

confirm() 메소드는 메시지를 전달한다는 점에서는 alert() 메소드와 비슷하지만, "확인"과 "취소" 버튼을 제공한다는 점에서는 다릅니다. 이 메소드는 사용자가 "확인" 버튼을 클릭하면 true가 리턴되고, "취소" 버튼을 클릭하면 false가 리턴됩니다. if 문을 이용하여 confirm() 메소드의 리턴값에 따라 서로 다른 문장을 실행할 수 있으므로 원하는 작업을 수행할 수 있습니다.

 

다음 코드를 문서 스크립트에 작성한 후, 미리보기 창을 열면, 다음과 같은 confirm 대화상자가 나타납니다.

 

if (confirm("교육용 CD 타이틀을 구경하시렵니까?"))

{location.href= "http://www.miraecom.co.kr"}

 

확인 버튼을 클릭하면 브라우저가 http://www.miraecom.co.kr로 이동하고, 취소 버튼을 클릭하면 현재 스크립트가 작성되어 있는 문서가 나타납니다.(완성 파일: sample29.htm)

 

▶ focus()

강제로 특정 윈도우 객체에 포커스를 줍니다. 다음은 HelpWin이라는 윈도우에 포커스를 주는 코드 입니다.

 

HelpWin.focus()

 

▶ forward()

웹 브라우저가 히스토리 리스트에서 이전 단계로 이동하도록 합니다.

 

▶ moveBy()

브라우저 윈도우의 현재 위치를 기준으로 하여, 윈도우의 위치를 이동시킵니다. 예를 들어, 다음 코드는 윈도우의 현재 포지션으로부터, 현재 윈도우를 우측으로 50 픽셀, 그리고 아래로 200 픽셀 이동시킵니다.

 

self.moveBy (50,200)

 

▶ moveTo()

윈도우의 좌측 상단 모서리를 지정된 스크린상의 특정 포인트로 이동시킵니다.  다음 코드는 윈도우의 좌측 상단 모서리를 사용자 스크린 상의 50,200 포지션으로 이동시킵니다.

 

self.moveTo (50,200)

 

▶ navigate()

브라우저가 지정된 URL로 이동하게 합니다. 이것은 location.href 속성과 같은 역할을 한다고 보면 됩니다. 다음 코드는 현재 브라우저가 http://www.miraecom.co.kr로 이동하도록 합니다.

 

self.navigate ("http://www.miraecom.co.kr")

 

▶ open()

새로운 브라우저 윈도우를 열고, 그 안에 웹 문서를 로드합니다. 또한 윈도우의 모양과 크기 등을 제어할 수 있습니다. 이 메소드의 기본 구문론은 다음과 같습니다.

 

window.open("URL", "windowname", "window_appearance")

 

URL은 새로운 윈도우에 로드될 문서의 URL이고, windowname은 새로운 윈도우에 정해주는 이름입니다. window_appearance에는 윈도우 특성들이 콤마로 구분된 형태의 리스트로 올수 있습니다. 윈도우 특성들은 부울값(0 또는 1, 또는 no 나 yes)을 가질수 있습니다. 다음은 window_appearance에 올수 있는 윈도우 특성들입니다.

. toolbar: 브라우저의 툴바를 나타낼지 어떨지를 지정

. location: (현재의 URL을 보여주는) 브라우저의 location 바를 나타낼지 어떨지를 지정

. directories: 디렉토리 버튼을 나타낼지 어떨지를 지정

. status: 상태바를 나타낼지 어떨지를 지정

. menubar: 메뉴바를 나타낼지 어떨지를 지정

. scrollbars: 스크롤바를 나타낼지 어떨지를 지정

. resizable: 새로운 윈도우의 크기를 조절할수 있게 할지 어떨지를 지정

. width: 새로운 윈도우의 폭을 픽셀 단위로 지정함 . 사용법은 width="pixels" 형태를 취합니다.

. height: 새로운 윈도우의 높이를 픽셀 단위로 지정함 . 사용법은 height="pixels" 형태를 취합니다.

. top: 새로운 윈도우를 디스플레이할 상단 좌표를 지정함. 사용법은 top="pixels" 형태를 취합니다.

. left: 윈도우를 디스플레이할 좌측 좌표를 지정합니다. 사용법은 left="pixels" 형태를 취합니다.

 

다음 코드는 툴바와 상태바를 갖는 새로운 윈도우를 열고, 그 안에  sample1.htm 문서를 로드합니다.

window.open( "sample1.htm", "NewWin", "width= 150, height=120, toolbar=1, status=1, resizable=1");

 

▶ prompt()

사용자들이 값을 입력할 수 있는 대화상자가 나타나게 합니다. 이 메소드는 호출 시에 입력 박스에 기본 값을 설정하고 호출합니다. 사용자가 확인 버튼을 클릭하면 텍스트 박스에 입력한 내용이 리턴되고(텍스트 박스에 입력한 내용이 없을 경우에는 빈 문자열이 리턴됨), 취소 버튼을 클릭하면 null 값이 리턴됩니다.

 

prompt("나이를 입력해 주세요", 36)

 

위 코드는 다음과 같은 입력상자가 나타나게 합니다.

 

▶ resizeBy():

지정된 크기만큼 현재 윈도우의 사이즈를 조절합니다. 다음 스크립트는 윈도우의 우측 하단 모서리를 우측으로 50 픽셀, 아래로 200 픽셀 키워, 전체 윈도우 크기를 확장 시킵니다.

 

self.resizeBy (50,200)

 

▶ resizeTo()

지정된 크기로 윈도우 크기를 조절합니다. 다음 코드는 윈도우의 크기를 240*480 픽셀 크기로 조절합니다.

 

self.resizeTo (240,480)

 

▶ scroll()

사용자를 현재 윈도우 내의 특정 포인트로 이동하게 합니다. 다음 코드는, 사용자가 x 좌표200, y 좌표 300 포지션(픽셀 단위) 으로 스크롤되게 합니다.

 

HelpWin.scroll(200,300)

 

▶ scrollBy()

윈도우의 뷰 영역을 지정한 값 만큼 이동시킵니다. 다음 코드는 윈도우 뷰 영역을 좌로 50 픽셀, 아래로 100 픽셀 이동시킵니다.

 

self.scrollBy (50,100)

 

▶ scrollTo()

지정된 픽셀 포지션으로 윈도우의 뷰 영역을 이동시킵니다. 다음은 뷰영역을 우측으로 100 픽셀, 아래로 300 픽셀 스크롤 합니다.

 

self.scrollTo (100,300)

 

▶ setInterval()

지정된 시간이 지나면 반복하여 자바스크립트 함수를 호출하거나 식을 평가하기위해 사용합니다.

 

구문론은 다음과 같습니다.

setInterval(expression, milliseconds)

setInterval(function, milliseconds, [arg1, arg2,....argN])

 

예를 들어, 다음 코드는 1초가 지나면 startanim() 함수를 실행합니다. 20과 100은 함수에 인자로 제공됩니다. 참고로 milliseconds는 1000분의 1초를 의미합니다.

 

setInterval(startanim(),1000,20,100)

 

setInterval 메소드는 사용자가 스크립트가 포함된 문서를 떠날때까지, 반복하여 참조된 함수를 호출하거나, 식을 실행합니다. 이 점이 setTimeout 메소드와의 차이점입니다. setTimeout 메소드는 지정된 시간이 지난 후에 단지 한번만 실행됩니다.

 

▶ setTimeout()

지정된 시간이 지난후에 함수를 실행하거나, 기존의 객체 속성이나 메소드에 액세스하기위해 사용됩니다.

 

구문론은 다음과 같습니다.

setTimeout(expression, milliseconds)

setTimeout(function, milliseconds, [arg1, arg2,....argN])

 

다음 코드는 5초가 지나면, TooMuchTime() 함수를 실행합니다.

 

setTimeout("TooMuchTime()", 5000)

 

시간 간격은 항상 milliseconds(1000분의 1초)로 지정됩니다.  Javascript 1.2에서는 이 메소드를 이용하여 식을 평가할 수도 있습니다. 이때는 <SCRIPT> 태그에 LANGUAGE="Javascript1.2"를 입력하여, 구버전의 브라우저에서 에러가 발생하지 않도록 해야 합니다.

 

▶ showModalDialog()

모달 대화상자 윈도우를 만듭니다. 모달 대화상자가 열려있는 동안은 다른 윈도우에서 작업할 수 없습니다.

구문론은 다음과 같습니다.

showModalDialog(URL [, arguments [, features]])

 

URL은 대화상자 열고자하는 파일의 URL입니다.

arguments는 열리는 윈도우를 위한 인자를 지정하는 문자열입니다.

features는 대화상자를 꾸밀수 있는 특성들이 옵니다. 여기에 올수 있는 특성들은 다음과 같습니다.

. dialogWidth: 대화상자의 폭을 픽셀 단위로 지정

. dialogHeight:  대화상자의 높이를 픽셀 단위로 지정

. dialogTop: 초기 수직 오프셋 값을 픽셀로 지정

. dialogLeft:  초기 좌측 오프셋 값을 픽셀로 지정

. center: 대화상자를 스크린의 중앙에 위치하게 할지 어떨지를 부울값(yes|no|0|1)으로 지정

. font: 폰트를 설정

. font-family: font family 설정

. font-size: 폰트 사이즈 설정

. font-weight: 폰트 두께 설정

. font-style: 폰트 스타일 설정

. font-variant: font variant 설정

. border: 테두리 폭(thick|think) 설정

. help: 타이틀 바에 헬프 버튼('?' button)이 나타나게 할지 어떨지를 부울값으로 설정

. minimize: 타이틀 바에 최소화 버튼이 나타나게 할지 어떨지를 부울값으로 설정

. maximize: 타이틀 바에 최대화 버튼이 나타나게 할지 어떨지를 부울값으로 설정

 

다음은 모달 대화상자 윈도우를 만들면서, 그 안에 sample5.htm 문서를 여는 예제 입니다.

showModalDialog("sample5.htm")

 

이벤트

Internet Explorer는 표준 Dynamic HTML 이벤트 중에 onHelp 이벤트를 지원하며, 그리고 다음과 같은 이벤트들을 지원합니다.

 

▶ OnBeforeUnload

onunload 이벤트가 발생하기 전에 발생합니다. 이 이벤트는 페이지가 언로드되기 전에 데이터가 업데이트 되도록 하기위해 Data Binding에 추가되었습니다.

 

▶ OnBlur

사용자가 참조된 윈도우 객체로부터 포커스를 제거할때마다 발생합니다. 이 이벤트는 <BODY>와 <FRAMESET> 태그에서 이용할 수 있습니다.

 

▶ OnError

문서가 로드되지 않거나, 스크립트 에러가 발생하는 등의 에러가 발생할 때 발생됩니다. 이 이벤트는 <BODY>와 <FRAMESET> 태그에서 이용할 수 있습니다.

 

▶ OnFocus

윈도우가 포커스를 가질때마다 발생합니다. 이 이벤트는 <BODY>와 <FRAMESET> 태그에서 이용할 수 있습니다.

 

▶ OnLoad

문서가 완전히 로드되면 발생하는 이벤트입니다. 이 이벤트는 <BODY>와 <FRAMESET> 태그에서 이용할 수 있습니다.

 

▶ OnResize

사용자가 윈도우의 크기를 조절할 때 마다 발생합니다.

 

▶ OnScroll

사용자가 윈도우의 스크롤바를 이용하여 스크롤할 때 마다 발생합니다.

 

▶ OnUnLoad

웹 브라우저의 윈도우를 닫거나 다른 문서로 이동할 때 발생합니다. 이 이벤트는 <BODY>와 <FRAMESET> 태그에서 이용할 수 있습니다.

 


▣  Debug와 Release모드의 차이 - .NET/C# - 2011. 6. 21. 13:25


프로젝트시 Debug에서 이상없이 실행되던 것이 Release로 컴파일하면 오류가 나는 경우
참고 사이트 : Http://sungod0.eglos.com3920875
 Debug mode vs Release mode

디버그 모드에서는 잘 돌아가는데 릴리즈 모드로 빌드해서 프로그램을 실행하면 뻑(?)이 나요. 왜 이럴까요?

이런 질문을 본적이 있거나 혹은 직접 경험해본 사람들이라면 이 버그를 잡는 고통을 잘 알것이다. 디버그와 릴리즈모드의 컴파일러 뒷단에서 일어나는 내용에 대해서 충분히 숙지 하지 못하고 있다면 이런 류의 버그를 잡기란 여간 까다로운 것이 아니다.

Visual Studio의 디버그 모드와 릴리즈 모드의 차이점은 무엇이고 어떤 일들이 일어나는지 본인의 경험, 웹상에서 찾은 정보들을 정리해두어 이런 버그로 고생하는데 도움(?)이 되었으면 한다.

 

Check List
•Pointer
초기화 되지 않은 포인터의 경우 디버그모드에서는 임의값 0xCD로 초기화를 수행하지만 릴리즈에서는 초기화를 수행하지 않는다. 디버그 모드에서 컴파일러 옵션을 조정하여 초기화 하지 않은 포인터 변수를 사용하는것을 예방 할 수 있다. /GZ 컴파일러 옵션은 기본적으로 VC++ 프로젝트 셋팅에서 기본값이 아니므로 필요하다면 추가해서 초기화 되지 않는 포인터의 값을 0xCC로 채우도록 해줘야 한다. /GZ 컴파일러 옵션의 가장 큰 목적은 초기화 하지 않은 메모리 변수의 값을 0xCCCCCCCC로 채워서 디버깅중에 개발자가 초기화 하지 않은 값임을 알 수 있도록 하는것이다.
◦디버그모드에서 deallocator에 의해 해제된 메모리에 채워지는 값은 0xDD 이다.
•Heap
디버그 모드에서 힙영역에 메모리를 할당하게 되면 guard byte( 0xFD로 초기화 )를 추가적으로 할당하여 가장 흔하게 범하는 zero-base의 arrary 인덱스를 잘못 계산하여 경계를 벗어난 영역을 접근하거나 지우려고 하는 코드를 작성했다고 하더라도 디버그 모드에서는 크래쉬가 발생하지 않을 수 있다. 이런 잠재적인 버그를 가진 프로그램을 릴리즈 모드에서 실행시키게 되면 크래쉬가 발생하게 된다.
•ASSERT
ASSERT 구문은 디버그 모드에서는 공백으로 대체되어지는 점을 잊고 아래와 같이 쓰게 되는 경우 이 코드는 릴리즈에서는 공백으로 대체되어 실제로 체크를 할 수 없게 된다.
ASSERT (OpenMyWindow () != NULL);위의 코드를 다음과 같이 바꾸게 되면 디버그와 릴리즈 모드 모두 정상적으로 동작하게 된다.
hWND = OpenMyWindow();ASSERT (hWND != NULL);이런 체크를 릴리즈에서도 하고 싶다면 VERITY 매크로를 사용하도록 하자.
•Prototypes 사용자 정의 메시지 처리를 위해 ON_MESSAGE 매크로를 사용중이라면 메시지 핸들러의 원형을 요구하는 타입에 정확하게 맞게 선언해줘야 한다. 디버그 모드에서는 원형에 일치하지 않더라도 컴파일러가 수정하여 동작하도록 만들어줘 버그를 발견하기 힘들게 만든다.
afx_msg LRESULT <class>::OnMyMessage (WPARAM wParam, LPARAM lParam);•Optimization Max Speed 옵션은 속도 최적화에 촛점을 맞추고 있기 때문에 최적화 과정에서 안전하지 않을수 있다. 기본적으로 릴리즈 모드에서는 Maximize Speed 옵션이 기본이지만 안전하게 속도 최적화를 보장하는 Minimize Size를 추천한다. 그리고, #pragma 지시자를 사용하여 특정 영역의 옵션을 설정 할 수 있다는것을 기억하자.
#pragma optimize("", off)// some code here #pragma optimize("", on)MSDN에서 권고하는 릴리즈 빌드 문제 해결
•ASSERT 문 검사
◦CheckList의 ASSERT
•디버그 빌드를 사용한 메모리 덮어쓰기 확인
1.InitInstance 함수의 맨 처음 부분에 다음 줄을 추가합니다. 이렇게 하면 디버그 메모리 할당자가 모든 할당된 메모리 주위에 보호 바이트를 배치합니다. 그러나 이 보호 바이트의 변경 여부(변경되었으면 메모리 덮어쓰기가 발생했음)를 확인하지 않으면 보호 바이트는 아무런 소용이 없습니다. 보호 바이트의 변경 여부를 확인하면 버퍼가 제공되어 메모리 덮어쓰기를 해결할 수 있습니다.

afxMemDF |= checkAlwaysMemDF;checkAlwaysMemDF 변수를 설정하면 MFC에서는 new 또는 delete가 호출될 때마다 AfxCheckMemory 함수를 호출하게 됩니다. 메모리 덮어쓰기가 감지된 경우에는 다음과 같은 TRACE 메시지가 생성됩니다.

Damage Occurred! Block=0x5533이러한 메시지가 표시되는 경우에는 코드를 단계별로 실행하여 손상된 부분을 확인해야 합니다. 메모리 덮어쓰기가 발생한 부분을 보다 정확하게 구별하려면 사용자가 AfxCheckMemory를 명시적으로 호출하면 됩니다. 예를 들면 다음과 같습니다.

ASSERT(AfxCheckMemory());    DoABunchOfStuff();ASSERT(AfxCheckMemory());첫 번째 ASSERT는 성공하고 두 번째 ASSERT는 실패하는 경우에는 두 호출 사이의 함수에서 메모리 덮어쓰기가 발생했을 가능성이 큽니다.

응용 프로그램의 특성에 따라 afxMemDF를 사용하면 프로그램 실행이 너무 느려져서 테스트조차 수행할 수 없는 경우도 있습니다. 왜냐하면afxMemDF 변수는 new 및 delete가 호출될 때마다 AfxCheckMemory가 호출되도록 하기 때문입니다. 이 경우에는 위의 예제와 같이 AfxCheckMemory( ) 호출을 분산시켜야 하며, 이러한 방법으로 메모리 덮어쓰기를 구별해야 합니다.

•릴리스 빌드에 대한 디버그 정보 생성 활성화
1.프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual C++ 프로젝트 속성 설정을 참조하십시오.
2./Z7 또는 /Zi를 활성화합니다.
3./INCREMENTAL:NO를 선택합니다.
4./DEBUG:Yes를 선택합니다.
5./OPT:REF를 선택합니다.
6./OPT:ICF를 선택합니다.
◦이제 릴리스 빌드 응용 프로그램을 디버깅할 수 있습니다. 문제를 찾으려면 오류가 발생한 부분을 찾을 때까지 코드를 단계별로 실행하거나, Just-In-Time 디버깅을 사용하여 올바르지 않은 매개 변수 또는 코드를 확인합니다.

프로그램이 디버그 빌드에서는 작동하지만 릴리스 빌드에서 작동하지 않으면 소스 코드에서 컴파일러 최적화 중 하나에 결함이 있는 경우일 수 있습니다. 문제를 격리하려면 문제의 원인이 되는 최적화와 파일을 찾을 때까지 각 소스 코드 파일에 대해 선택한 최적화를 비활성화해야 합니다. 예를 들어, 파일을 두 그룹으로 나누고 한 그룹에서 최적화를 비활성화한 다음 문제가 파일 하나에서만 발생할 때까지 각 그룹을 계속 나눌 수 있습니다.

디버그 빌드에서 그러한 버그를 노출시키려면 /RTC를 사용합니다.

•메모리 덮어쓰기 확인
힙 조작 함수 호출 시 액세스 위반이 발생되면 프로그램이 힙을 손상시켰을 가능성이 있습니다. 이러한 경우의 일반적인 증상은 다음과 같습니다.
Access Violation in _searchseg_heapchk 함수는 디버그 빌드와 릴리스 빌드 모두에서(Windows NT에만 해당) 런타임 라이브러리 힙의 무결성을 확인하는 데 사용할 수 있습니다. _heapchk는 AfxCheckMemory 함수를 사용하여 힙 덮어쓰기를 확인하는 것과 같은 방법으로 사용할 수 있습니다. 예를 들면 다음과 같습니다.
if(_heapchk()!=_HEAPOK)   DebugBreak();이 함수가 실패하는 경우에는 힙이 손상된 시점을 확인해야 합니다.
Reference
•Debugging Release Mode Problems
•Debug vs Release mode differences when storing a delegate in a hashtable
•My app works in debug build, but crashes in release. What's the difference between the two?
•joelonsoftware "Problems with Release build (but not Debug)"
•HOWTO: 릴리즈 모드로 build 된 프로그램의 디버깅
tag: debug, release


  

========================================================================================================

mastojun.net/181
http://www.jongkok4.net/10

-릴리즈 모드
프로그램을 배포하기 위해 컴파일 하는 모드
-초기화 하지 않는다.
-같은 문자열 상수라도 서로다른 공간에 할당한다.
-디버깅정보를 삽입하지 않고 코드를 최적화하여 실행 파일 크기를 최대한 줄여준다.
-속도나 크기면에서 월등이 유리하다(메모리 점유율로 낮아지고 실행도 빨라짐)
-더이상 현재버전에서 내결함성이나 문제점들을 발견할 수 없었을때 빌드하여 주는 모드


-디버깅 모드
-컴파일시 들어가는 디버깅에 필요한 자질구리한 정보를 뺀 알짜 프로그램만 쏙 뽑아냄
-실행파일에 디버깅 정보를 삽입하여 언제든지 디버깅을 할 수 있도록 하며 Debug서브 폴더에 실행파일을 만들어준다.
-디버깅정보가 들어가 있기때문에 실행파일 상태를 확인할수 있다.
-디버그에 필요한 정보들을 실행시 계속 체크함으로써 속도가 느림


-디버그 빌드와 릴리즈 빌드에서 서로 실행 결과가 다른 경우?
특기 디버그 빌드에서는 괜찮은데 릴리즈 빌드에서만 오류가 발생하여 프로그램이 죽는 경우가 있는데
이런 경우는 대부분 메모리가 깨진 경우에 발생한다. 두 모드에서 동적으로 메모리를 할당하면 힙 영역에
요청한 크기만큼 메모리를 할당 받게 되는데 그 초기값이 다르다.

-릴리즈 모드와 디버깅모드의 차이점은?
디버깅 정보를 실행코드 안에 넣느냐 안넣느냐임
즉 디버거 모드로 컴파일하게되면 실행상태에서 추적할수 있는 정보가 실행파일 안에 들어가게 됨
그래서 용량이 커점
릴리즈는 디버깅 정보없어 순수한 소스코드자체의 기능만 컴파일되어 실행파일로 만들어짐


▣  JavaScript 형변환 - .NET/JavaScript - 2011. 6. 20. 10:18
출처 : http://blog.naver.com/juyoec?Redirect=Log&logNo=40131177460
 



 JAVASCRIPT
 형변환

eval()                 수식 또는 문자열(계산) -> 실수                             
Number()               문자             -> 숫자                             
String()               숫자             -> 문자                             
escape()               한글             -> 16진수                           
unescape()             16진수           -> 한글                             
parseInt(문자열, 진수) 문자열           -> 정수(원하는 진수 변환 가능)      
parseFloat()           문자열           -> 부동소수점, 변환불가일때 NaN 반환
isFinite()             유한수 TRUE, 무한수 FALSE                            
isNan()                문자   TRUE, 숫자   FALSE      

[출처] JAVASCRIPT 형변환|작성자 Jwing




javascript의 형변환은 위 함수를 이용합니다.


parseInt의 경우 위의 진수 표시를 안하면 디폴트로 10진수로 인식한다는 말이 있는데 말도 안됩니다.

무조건 진수표시를 해야지 원하는결과를 얻을 수 있습니다.



articles
recent replies
recent trackbacks
notice
Admin : New post