visual studio에서 Debug의 watch 질문

high385의 이미지

visual studio에서 Debug의 watch를 open 후에 #define으로 정의한 상수를 이용한 값은 볼 수 없는 것인가요?

예를 들어서 #define A 1로 정의 후

watch에서 A*3 등을 입력하면 CXX0017: Error: symbol "A" not found 라고 나오네요.

또 한가지 더 질문드리면

visual studio에서 Debug의 watch에서 sizeof(long long)하면 4가 나오는데 8이 나오게 할 수도 있나요? 4로 나오는 이유도 알고 싶습니다.

cpp 파일에서 int size = sizeof(long long);로 하면 size는 8로 출력되는데요.

watch와 실제 결과값이랑 차이가 발생하네요~ 이유를 아시면 알려주세요.

shint의 이미지

.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

gilgil의 이미지

MS에 문의하라니... 쩝...

define 값은 말 그대로 preprocessor에서 처리되어 지는 값(치환되는 값)입니다.
컴파일 과정에서 일단 치환이 되면 그 이후에는 존재하지 않는 값이라고 보면 됩니다.
당연히 symbol로 남는 value가 아니죠.

bushi의 이미지

컴파일러나 컴파일러 옵션, 디버거의 기능과도 관련이 있긴 합니다.
그러니 컴파일러, 디버거의 매뉴얼을 샅샅이 훑거나 구글링을 열심히 해야겠는데, 돈주고 산 visual studio 라면 이런 귀찮은 일은 MS 직원이 하는게 마땅하지 않을까요 ?

당장 gcc 와 gdb 만 해도 #define 으로 정의된 것들에 대해 gdb 에서 볼 수 있는 방법이 있습니다.

$ gcc -gdwarf-2 -g3 -o wa wa.c
$ gdb wa
...
...
(gdb) list main
2	
3	#define A 6
4	#define ADD(x) (A + (x))
5	
6	int main(void)
7	{
8		return 0;
9	}
(gdb) print A*3
$1 = 18
(gdb) print ADD(10)
$2 = 16

shint의 이미지


확인해보니. 오류에 대한 내용과 몇가지 방법이 있네요.

크게 4가지로 분류했습니다.
- 오류 코드 검색
- __cdecl
- 실제 sizeof 연산자를 출력한 결과
- size_t sizeof() 연산자 검색

sizeof 는 연산자이고. unsigned long * 형입니다. typedef ULONG_PTR SIZE_T;
printf() 는 __cdecl을 사용합니다.
자세한 내용은 링크를 참고해주시기 바랍니다.

//-------------------------------------------
CXX0017: Error: symbol "A" not found
http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=CXX0017%3A+Error%3A+symbol+%22A%22+not+found&gbv=2&oq=CXX0017%3A+Error%3A+symbol+%22A%22+not+found&gs_l=heirloom-hp.12...4266.4266.0.4757.1.1.0.0.0.0.135.135.0j1.1.0....0...1ac..34.heirloom-hp..1.0.0.sCd1Qr_aRgM

//-------------------------------------------
__cdecl
http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=__cdecl&gbv=2&oq=__cd&gs_l=heirloom-hp.3.0.0l7j0i10j0l2.1013.3511.0.5381.4.4.0.0.0.0.180.555.1j3.4.0....0...1ac.1.34.heirloom-hp..2.2.238.VpUmEMSKaS0

//-------------------------------------------
DevC++ 32비트 컴퓨터

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char** argv) 
{
    printf("sizeof(long)        %d\n", sizeof(long));
    printf("sizeof(float)       %d\n", sizeof(float));
    printf("sizeof(long long)   %d\n", sizeof(long long));
    printf("sizeof(__int64)     %d\n", sizeof(__int64));
    printf("sizeof(double)      %d\n", sizeof(double));
	return 0;
}
size_t
#if 0
sizeof(long)        4
sizeof(float)       4
sizeof(long long)   8
sizeof(__int64)     8
sizeof(double)      8
#endif

//-------------------------------------------
Common Visual C++ 64-bit Migration Issues
https://msdn.microsoft.com/en-us/library/3b2e7499.aspx

Size Specification
https://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx

2.2.43 SIZE_T
SIZE_T is a ULONG_PTR representing the maximum number of bytes to which a pointer can point.
This type is declared as follows:
typedef ULONG_PTR SIZE_T;
https://msdn.microsoft.com/en-us/library/cc441980.aspx

sizeof_t msdn
size_t (unsigned __int64 or unsigned integer, depending on the target platform)
Result of sizeof operator.
CRTDEFS.H and other include files
https://msdn.microsoft.com/en-us/library/323b6b3k.aspx

5-3-다.sizeof 연산자
http://www.soen.kr/

sizeof 연산자 (C)
https://msdn.microsoft.com/ko-kr/library/0w557fh7.aspx

sizeof operator
http://en.cppreference.com/w/cpp/language/sizeof

sizeof 연산자
https://msdn.microsoft.com/ko-kr/library/4s7x1k91.aspx#

_countof Macro
Compute the number of elements in a statically-allocated array.

size_t _countof(
array
};

Fundamental Types (C++)
https://msdn.microsoft.com/en-us/library/cc953fe1.aspx#

Marshal::SizeOf 메서드 (Type^)
https://msdn.microsoft.com/ko-kr/library/5s4920fa(v=vs.110).aspx#

static int SizeOf(
Type^ t
)

Windows Data Types
https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.