티스토리 뷰
Symbol Table은 컴파일러와 링커에서 사용하는 데이터 구조로, 프로그램에서 사용되는 식별자(변수 및 함수 이름 등) 목록과 유형, 범위(가시성), 메모리 위치 등 각 식별자에 대한 정보를 담고 있다. Symbol Table은 컴파일러와 링커가 프로그램 전체에서 이러한 식별자에 대한 참조를 해결하는 데 도움이 된다.
디버깅의 맥락에서 디버그 심볼 내의 Symbol Table은 디버거가 메모리 주소 및 기타 로우-레벨 정보를 사람이 읽을 수 있는 식별자에 다시 매핑하는 데 도움이 된다. 이 매핑을 통해 디버거는 변수 값을 표시하고, 코드 한 줄씩 단계별로 살펴보고, 기타 고급 디버깅 기능을 제공할 수 있다.
컴파일할 때 Symbol Table은 컴파일러가 각 함수와 변수가 어디에 정의 되어 있고 어떻게 서로 연결되어야 하는지 이해하는 데 도움이 된다. 디버깅 중에 이 테이블을 사용하면 디버거가 변수와 함수가 있는 메모리 주소뿐만 아니라 이름과 코드에서 정의된 위치도 표시하므로 프로그램의 흐름을 쉽게 탐색하고 이해할 수 있다.
즉, Debugging Symbols은 컴파일된 바이너리 코드와 원본 소스 코드 사이의 다리 역할을 하여 개발자가 프로그램을 보다 효과적으로 디버깅할 수 있게 해준다. 반면 Symbol Table은 컴파일 및 링크 중에 식별자를 추적하기 위해 사용되는 더 넓은 개념으로, 컴파일된 코드를 소스 코드 식별자에 다시 매핑하는 데 도움을 주어 디버깅 프로세스에서 중요한 역할을 한다.
아래와 같은 코드가 있다고 가정하자.
// main.cpp
#include <iostream>
void printMessage() {
std::cout << "Hello, World!" << std::endl;
}
int main() {
printMessage();
return 0;
}
컴파일 과정에서 컴파일러는 아래와 같은 Symbol Table을 구성한.
Symbol | Type | Scope | Location |
printMessage | Function | Global | main.cpp:3 |
std::cout | Variable | External | <iostream> |
std::endl | Function | External | <iostream> |
main | Function | Global | main.cpp:7 |
- Symbol
: 함수 또는 변수 이름 - Type
: Symbol이 함수, 변수, 클래스 등인지 여부 - Scole
: Symbol의 범위(예: 함수가 로컬, 전역, 네임스페이스 내인지) - Location
: Symbol이 정의된 위치. 표준 라이브러리(std::cout, std::endl)과 같은 외부 심볼의 경우 실제 위치는 라이브러리 헤더 또는 바이너리 내에 있을 수도
참고
'기술(Tech, IT) > C++' 카테고리의 다른 글
[Tech, C++] VK_CONTROL (0) | 2024.03.06 |
---|---|
[Tech, C++] Accelerator Key (액셀러레이터 키) - Windows (2) | 2024.03.05 |
[Tech, C++] Debugging Symbols (디버깅 심볼) (1) | 2024.02.25 |
[C++] Pointer (포인터) (0) | 2023.10.27 |
[C++] Overriding (오버라이딩) (0) | 2023.10.26 |
- Total
- Today
- Yesterday
- machine learning
- 리트코드
- 딕셔너리
- ml
- join
- C++
- 이코노미스트
- The Economist Espresso
- defaultdict
- min heap
- tf-idf
- Python
- 머신 러닝
- Android
- 오블완
- 파이썬
- Computer Graphics
- java
- 이코노미스트 에스프레소
- 소켓 프로그래밍
- 투 포인터
- I2C
- DICTIONARY
- leetcode
- vertex shader
- socket programming
- The Economist
- Hash Map
- 티스토리챌린지
- 안드로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |