맨위로가기

GNU 디버거

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

GNU 디버거(GDB)는 1986년 리처드 스톨만에 의해 GNU 시스템의 일부로 개발된 자유 소프트웨어 디버거이다. 컴퓨터 프로그램의 실행을 추적하고 수정하는 다양한 기능을 제공하며, 변수 값 관찰 및 함수 호출이 가능하다. 알파, ARM, X86 등 다양한 아키텍처를 지원하며, 파이썬 및 GNU Guile 스크립팅을 통한 확장성도 제공한다. 명령줄 인터페이스를 기본으로 사용하며, 원격 디버깅을 지원하여 다른 머신에서 실행되는 프로그램을 디버깅할 수 있다.

더 읽어볼만한 페이지

  • 디버거 - Valgrind
    Valgrind는 동적 분석 도구들의 프레임워크로, 가상 머신 기반으로 작동하며 메모리 오류 감지, 멀티스레드 코드 분석 등 다양한 기능을 제공하지만, 정적 또는 스택 할당 데이터의 경계 오류는 모두 감지하지 못한다.
  • 디버거 - Eclipse (소프트웨어)
    이클립스는 IBM에서 개발한 자바 기반의 통합 개발 환경으로, OSGi 서비스 플랫폼을 런타임 아키텍처로 사용하며, 플러그인을 통해 기능을 확장할 수 있고, 이클립스 퍼블릭 라이선스를 따르며, 한국어를 지원한다.
  • GNU 프로젝트 소프트웨어 - GNU 코어 유틸리티
    GNU 코어 유틸리티는 유닉스 계열 운영체제에서 파일, 셸, 텍스트 조작을 위한 기본적인 명령어 모음으로, GNU 파일 유틸리티에서 시작하여 3개의 패키지가 통합되어 발전했으며 셸 스크립트 및 시스템 관리에 필수적인 도구를 제공한다.
  • GNU 프로젝트 소프트웨어 - GNU 허드
    GNU 허드는 유닉스 운영 체제를 대체하는 것을 목표로 개발된 GNU 프로젝트의 커널로, 마이크로커널 기반의 서버-클라이언트 아키텍처를 사용하며, 파일 시스템 기능을 확장하는 트랜슬레이터 개념을 제공한다.
GNU 디버거 - [IT 관련 정보]에 관한 문서
개요
GDB 아처 피시
GDB 아처 피시
개발자GNU 프로젝트
출시일1986년
최신 안정 버전12.1
최신 안정 버전 출시일2022년 5월 1일
최신 시험 버전해당 없음
최신 시험 버전 출시일해당 없음
프로그래밍 언어C, C++, Python
운영 체제유닉스 계열, 윈도우
종류디버거
라이선스GPLv3
공식 웹사이트GNU GDB 공식 웹사이트
지원 언어

2. 역사

1986년 리처드 스톨먼이 GNU Emacs가 "상당히 안정"된 이후[3] GNU 시스템의 일부로 처음 작성했다.[3][16] GDB는 BSD 배포판과 함께 제공된 dbx (debugger)|DBX영어 디버거를 모델로 했으며,[3][16] GNU 일반 공중 사용 허가서(GPL)에 따라 출시된 자유 소프트웨어이다.[3][16]

1990년부터 1993년까지 존 길모어가 유지 관리했다.[4][17] 현재는 자유 소프트웨어 재단에서 임명한 GDB 운영 위원회에서 유지 관리하고 있다.[5][18]

3. 기술적 세부 사항

GDB컴퓨터 프로그램의 실행을 추적하고 수정할 수 있는 다양한 기능을 제공한다. 사용자는 프로그램 내부의 변수 값을 확인하거나 변경할 수 있으며, 프로그램의 일반적인 실행 흐름과 별개로 함수를 호출하는 것도 가능하다.

GDB는 다른 프로세스의 실행을 관찰하고 제어하며, 프로세스의 메모리와 레지스터를 검사하고 변경하기 위해 `ptrace`("process trace"의 약자)라는 시스템 호출을 사용한다. 주요 GDB 동작과 관련된 `ptrace` 호출은 다음과 같다.

GDB 동작관련 ptrace 호출
프로세스 시작 추적`PTRACE_TRACEME` – 부모를 트레이서로 만듦 (추적 대상 프로세스가 호출)
실행 중인 프로세스에 연결`PTRACE_ATTACH`
프로세스 중지`kill(child_pid, SIGSTOP)` (또는 `PTRACE_INTERRUPT`)
프로세스 계속 실행`PTRACE_CONT`
레지스터 읽기/쓰기`PTRACE_GET(FP)REGS(ET)` 및 `PTRACE_SET(FP)REGS(ET)`
메모리 읽기/쓰기`PTRACE_PEEKTEXT` 및 `PTRACE_POKETEXT`



중단점(breakpoint)은 특정 메모리 주소의 원래 명령어를 특별한 중단점 명령어로 교체하는 방식으로 구현된다. 프로그램 실행 중 이 중단점 명령어를 만나면 SIGTRAP 신호가 발생하여 GDB가 제어권을 넘겨받게 된다.

3. 1. 지원 프로세서

2003년 기준으로 GDB가 지원하는 주요 프로세서는 다음과 같다.

프로세서 계열예시
알파
ARM
AVR
H8/300
System/370 / System 390
x86 / x64
IA-64 "아이테니엄"
모토로라 68000
MIPS
PA-RISC
PowerPC
SuperH
SPARC
VAX



또한, 표준 릴리스에서 지원되는 덜 알려진 대상 프로세서는 다음과 같다. 새로운 릴리스에서는 이들 중 일부를 지원하지 않을 수 있다.

프로세서 계열예시
AMD 29000
ARC
CRIS
D10V / D30V
FR-30 / FR-V
인텔 i960
M32R
68HC11
모토로라 88000
MCORE
MN10200 / MN10300
NS32K
Stormy16
V850
Z8000



GDB에는 M32R이나 V850과 같은 일부 프로세서를 위한 내장 시뮬레이터도 포함되어 있다.[19].

3. 2. 원격 디버깅

GDB임베디드 시스템 디버깅 등에 사용되는 '원격' 모드를 지원한다. 원격 디버깅은 GDB가 한 머신에서 실행되고, 디버깅 대상 프로그램은 다른 머신에서 실행되는 방식이다. GDB는 GDB 프로토콜을 이해하는 원격지의 '스텁(stub)'과 직렬 포트 또는 TCP/IP를 통해 통신할 수 있다.[10] 스텁 프로그램은 GDB와 함께 제공되는 스텁 파일에 링크하여 생성할 수 있으며, 이는 통신 프로토콜의 대상 측을 구현한다.[11] 또는, 프로그램을 수정하지 않고 gdbserver|gdbserver영어를 사용하여 원격으로 디버깅할 수도 있다.

이 원격 디버깅 모드는 실행 중인 리눅스 커널을 소스 수준에서 디버깅하는 KGDB에서도 사용된다. KGDB를 사용하면 커널 개발자는 일반 응용 프로그램을 디버깅하는 것과 유사하게 커널을 디버깅할 수 있다. 커널 코드 내에 중단점을 설정하고, 코드를 단계별로 실행하며, 변수 값을 관찰하는 것이 가능하다. 하드웨어 디버깅 레지스터를 지원하는 컴퓨터 아키텍처에서는 특정 메모리 주소가 실행되거나 접근될 때 중단점을 발생시키는 감시점(watchpoint)을 설정할 수도 있다. KGDB는 디버깅 대상 머신에 직렬 케이블이나 이더넷으로 연결된 별도의 머신이 필요하다. FreeBSD에서는 파이어와이어(FireWire) DMA를 이용한 디버깅도 가능하다.[12]

3. 3. 확장성

GDB는 여전히 활발하게 개발되고 있다. 버전 7.0부터 파이썬 스크립팅을 지원하여 기능을 확장할 수 있으며[7][20], 버전 7.8부터는 GNU Guile 스크립팅도 지원한다.[8][21]

또한 버전 7.0부터는 '되돌리기 디버깅'(가역 디버깅) 기능을 지원한다.[9][22] 이 기능을 통해 디버깅 세션을 뒤로 단계별로 이동시킬 수 있어, 마치 비디오를 되감듯 프로그램 실행 과정을 역추적하며 문제의 원인을 파악하는 데 도움을 준다. 예를 들어 프로그램이 충돌했을 때, 충돌 직전까지의 과정을 되짚어 보며 무엇이 잘못되었는지 확인할 수 있다.

3. 4. 명령어 사용 예

...

Reading symbols from /path/example...done.

(gdb) run

Starting program: /path/example

Program received signal SIGSEGV, Segmentation fault.

0x0000000000400527 in foo_len (s=0x0) at example.c:8

8 return strlen (s);



run 명령으로 프로그램을 실행하면, GDB는 세그멘테이션 오류(SIGSEGV)가 발생했음을 알리고 오류가 발생한 위치(example.c 파일의 8번째 줄)와 당시의 함수(foo_len), 그리고 인자 값(s=0x0, 즉 NULL 포인터)을 보여준다.

print 명령으로 변수 s의 값을 확인해보면 역시 NULL임을 알 수 있다.



(gdb) print s

$1 = 0x0



bt (backtrace) 명령을 사용하면 오류 발생 지점까지의 함수 호출 스택(스택 트레이스)을 확인할 수 있다. 이를 통해 main 함수에서 foo_len 함수를 호출했고, foo_len 함수 내부에서 라이브러리 함수인 strlen을 호출하다가 오류가 발생했음을 파악할 수 있다. (출력 결과는 시스템 환경에 따라 다소 차이가 있을 수 있다.)



(gdb) bt

#0 0xb7ee94f3 in strlen () from /lib/i686/cmov/libc.so.6

#1 0x08048435 in foo_len (s=0x0) at example.c:8

#2 0x0804845a in main (argc=, argv=) at example.c:16



오류의 원인은 main 함수에서 NULL 값을 가진 포인터 afoo_len 함수에 전달했고, foo_len 함수는 이 NULL 포인터를 다시 strlen 함수에 전달했기 때문이다. strlen 함수는 NULL 포인터의 길이를 계산할 수 없으므로 오류가 발생한 것이다.

문제를 해결하기 위해 main 함수에서 포인터 a가 유효한 문자열을 가리키도록 코드를 수정한다.

'''수정된 코드 (example.c)'''



#include

#include

#include

size_t foo_len( const char *s )

{

return strlen(s);

}

int main( int argc, char *argv[] )

{

const char *a = "This is a test string"; // 유효한 문자열 주소를 할당

printf( "size of a = %lu\n", foo_len(a) );

exit( 0 );

}



수정된 코드를 다시 컴파일하고 GDB에서 실행한다.



$ gcc example.c -Og -g -o example

$ gdb ./example

GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16)

Copyright (C) 2011 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

...

Reading symbols from /path/example...done.

(gdb) run

Starting program: /path/example

size of a = 21

[Inferior 1 (process 14290) exited normally]



이번에는 프로그램이 정상적으로 실행되어 문자열 "This is a test string"의 길이인 21을 출력하고 종료된다. GDB는 프로그램의 출력과 함께 정상 종료되었음을 알려준다.

4. 사용자 인터페이스

GDB는 자체적인 GUI를 포함하고 있지 않으며, 기본적으로 명령줄 인터페이스(CLI)를 사용한다. 다만, 텍스트 사용자 인터페이스(TUI)는 포함하고 있다.

GDB를 위한 다양한 프론트엔드 도구들이 개발되었다. 대표적인 예로는 DDD, Nemiver, KDbg, GDBk/Insight, UltraGDB, Xxgdb, Xcode 디버거, [https://gede.dexar.se/ Gede], [https://github.com/epasveer/seer Seer], HP Wildebeest Debugger GUI (WDB GUI) 등이 있다.

또한 여러 통합 개발 환경(IDE)에서 GDB와의 인터페이스를 지원한다. CodeLite, Code::Blocks, Dev-C++, Geany, GNAT 프로그래밍 스튜디오, KDevelop, Qt Creator, Lazarus, MonoDevelop, 이클립스, NetBeans, Visual Studio 등이 GDB를 활용할 수 있다.

GNU Emacs에서는 "GUD 모드"를 통해 GDB를 사용할 수 있으며, Vim을 위한 도구(예: clewn)도 존재한다. 이러한 프론트엔드 및 IDE 연동 기능들은 통합 개발 환경에서 제공하는 디버깅 기능과 유사한 편의성을 제공한다.

이 외에도 메모리 누수 탐지기와 같이 GDB와 함께 작동하도록 설계된 다른 디버깅 도구들도 존재한다.

5. 한계

GDB는 자체적인 GUI를 내장하고 있지 않다는 점이 주요한 한계로 꼽힌다. 이 때문에 사용자는 기본적으로 명령행 인터페이스를 통해 GDB를 조작해야 한다. 비록 TUI 모드를 제공하기는 하지만, GUI 환경에 익숙한 사용자에게는 다소 불편할 수 있다.

이러한 단점을 보완하기 위해 다양한 외부 도구들이 개발되었다. DDD, GDBk/Insight, UltraGDB, Xxgdb, Nemiver, KDbg, Xcode 디버거, [https://gede.dexar.se/ Gede], [https://github.com/epasveer/seer Seer], HP Wildebeest Debugger GUI (WDB GUI)와 같은 여러 프론트엔드 프로그램들은 GDB에 그래픽 인터페이스를 제공하여 사용 편의성을 높인다. 또한, GNU Emacs의 "GUD 모드"나 Vim용 도구(예: clewn)를 통해서도 GDB를 활용할 수 있다. Codelite, Code::Blocks, Dev-C++, Geany, GNAT 프로그래밍 스튜디오(GPS), KDevelop, Qt Creator, Lazarus, MonoDevelop, Eclipse, NetBeans, Visual Studio 등 다수의 IDE 역시 GDB와의 연동 기능을 지원하여, IDE 환경 내에서 디버깅 작업을 수행할 수 있게 한다.

하지만 이러한 해결책들은 GDB 자체의 기능이 아닌 외부 도구와의 연동에 의존하는 방식이라는 점에서 한계가 있다. 더불어, 메모리 누수 탐지와 같은 일부 고급 디버깅 기능은 GDB만으로는 직접 수행하기 어렵고, 이를 위해서는 별도의 메모리 분석 도구와 함께 사용해야 한다.

6. 관련 도구

GDB는 자체적인 GUI를 포함하고 있지 않으며 기본적으로 명령행 인터페이스를 사용한다. 다만, 텍스트 사용자 인터페이스는 내장하고 있다. GDB의 기능을 더 쉽게 사용하기 위한 여러 프론트엔드 도구들이 개발되었다. 대표적인 프론트엔드로는 DDD, GDBk/Insight, UltraGDB, Xxgdb, Nemiver, KDbg, Xcode 디버거, Gede, Seer, HP Wildebeest Debugger GUI (WDB GUI) 등이 있다.

또한, 다양한 IDE에서 GDB와 연동하여 디버깅 기능을 제공한다. CodeLite, Code::Blocks, Dev-C++, Geany, GNAT 프로그래밍 스튜디오 (GPS), KDevelop, Qt Creator, Lazarus, MonoDevelop, 이클립스, NetBeans, Visual Studio 등이 GDB 인터페이스를 지원한다. 텍스트 편집기인 GNU Emacs는 "GUD 모드"를 통해 GDB 연동을 지원하며, Vim을 위한 연동 도구(예: clewn)도 존재한다. 이러한 도구들은 IDE에서 제공하는 디버거와 유사한 기능을 제공한다.

GDB와 함께 사용할 수 있는 다른 종류의 디버깅 도구들도 있다. 예를 들어, 메모리 누수를 탐지하는 도구들이 GDB와 연동되도록 설계되어 있다.

GDB는 임베디드 시스템 개발 등에서 유용하게 사용되는 "원격(remote)" 모드를 지원한다. 원격 모드는 GDB가 실행되는 컴퓨터와 디버깅 대상 프로그램이 실행되는 컴퓨터가 분리된 환경에서 사용된다. GDB는 직렬 장치 또는 TCP/IP 네트워크를 통해 원격 대상 시스템의 "스텁(stub)" 프로그램과 GDB 프로토콜로 통신한다.[10] 이 스텁 프로그램은 GDB와 함께 제공되는 파일을 이용하여 직접 생성하거나,[11] gdbserver 유틸리티를 사용하여 디버깅 대상 프로그램을 수정하지 않고도 원격 디버깅 환경을 구축할 수 있다.

이 원격 모드는 리눅스 커널을 소스 코드 수준에서 디버깅하는 KGDB에서도 활용된다. KGDB를 사용하면 커널 개발자는 마치 일반 응용 프로그램을 디버깅하듯이 커널 코드를 디버깅할 수 있다. 커널 코드 내부에 중단점(breakpoint)을 설정하고, 코드를 한 단계씩 실행(step)하며, 변수의 상태를 관찰하는 것이 가능하다. 하드웨어 디버깅 레지스터를 지원하는 아키텍처에서는 특정 메모리 주소에 접근할 때 실행을 멈추는 감시점(watchpoint) 기능도 사용할 수 있다. KGDB를 사용하기 위해서는 디버깅 대상 컴퓨터에 직렬 케이블이나 이더넷으로 연결된 별도의 컴퓨터가 필요하다. FreeBSD 운영체제에서는 FireWire 직접 메모리 접근(DMA) 기능을 이용한 커널 디버깅도 지원한다.[12]

7. 예제

...

Reading symbols from /path/example...done.

(gdb) run

Starting program: /path/example

Program received signal SIGSEGV, Segmentation fault.

0x0000000000400527 in foo_len (s=0x0) at example.c:8

8 return strlen (s);



GDB는 프로그램이 8번째 줄의 `strlen(s)` 함수 호출에서 세그멘테이션 오류로 비정상 종료되었음을 알려준다. `print` 명령어를 사용하여 변수 `s`의 값을 확인하면 NULL임을 알 수 있다.



(gdb) print s

$1 = 0x0



`bt` (backtrace) 명령어를 사용하면 오류 발생 시점까지의 함수 호출 스택을 확인할 수 있다. 이를 통해 `main` 함수에서 `foo_len` 함수를 호출했고, `foo_len` 함수 내부에서 `strlen` 함수를 호출하다가 오류가 발생했음을 알 수 있다.



(gdb) bt

#0 0xb7ee94f3 in strlen () from /lib/i686/cmov/libc.so.6

#1 0x08048435 in foo_len (s=0x0) at example.c:8

#2 0x0804845a in main (argc=, argv=) at example.c:16



(참고: `strlen` 함수의 구현 방식(인라인 함수 여부 등)이나 시스템 환경에 따라 스택 트레이스 결과는 약간 다를 수 있다.)

오류의 원인은 `main` 함수에서 `a` 변수를 NULL로 초기화한 뒤, 이 값을 `foo_len` 함수에 전달했고, `foo_len` 함수는 다시 이 NULL 값을 `strlen` 함수에 전달했기 때문이다. `strlen` 함수는 널 포인터를 처리할 수 없으므로 세그멘테이션 오류가 발생한 것이다.

문제를 해결하기 위해 `main` 함수에서 변수 `a`가 유효한 문자열을 가리키도록 코드를 수정한다.



#include

#include

#include

size_t foo_len( const char *s )

{

return strlen(s);

}

int main( int argc, char *argv[] )

{

const char *a = "This is a test string"; // NULL 대신 유효한 문자열 주소 할당

printf( "size of a = %lu\n", foo_len(a) );

exit( 0 );

}



수정된 코드를 다시 컴파일하고 GDB 내에서 실행하면 정상적으로 작동하는 것을 확인할 수 있다.



$ gcc example.c -Og -g -o example # 다시 컴파일

$ gdb ./example

GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16)

Copyright (C) 2011 Free Software Foundation, Inc.

... (GDB 시작 메시지 생략) ...

Reading symbols from /path/example...done.

(gdb) run

Starting program: /path/example

size of a = 21

[Inferior 1 (process 14290) exited normally]



GDB는 `printf` 함수의 출력 결과("size of a = 21")를 화면에 보여주고, 프로그램이 정상적으로 종료되었음을 알려준다.

명령어설명
gdb program쉘에서 "program" 파일을 GDB로 로드하여 디버깅 시작
(gdb) run [인자...]로드된 프로그램을 실행. 필요시 프로그램 인자를 전달할 수 있음.
(gdb) bt백트레이스(backtrace). 프로그램이 비정상 종료되었을 때 함수 호출 스택을 보여줌.
(gdb) info registers현재 CPU 레지스터 값들을 보여줌.
(gdb) print 변수명특정 변수의 현재 값을 출력.
(gdb) disas [주소]특정 주소 주변의 어셈블리어 코드를 보여줌. 예: disas $pc-16, $pc+16 (현재 프로그램 카운터 주변 코드)


8. 외부 자료


  • 리처드 M. 스톨만, 롤랜드 페쉬, 스탠 쉡스, 외, [http://sourceware.org/gdb/current/onlinedocs/gdb.html ''GDB로 디버깅하기''] (자유 소프트웨어 재단, 2011) ISBN 978-0-9831592-3-0
  • [https://web.archive.org/web/20070303045900/http://sourceware.org/gdb/current/onlinedocs/gdbint.html GDB 내부 구조]
  • [http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html ''RMS의 GDB 튜토리얼''] (라이언 마이클 슈미트, 리처드 매튜 스톨먼 아님)
  • [https://www.gdb-tutorial.net ''GDB 튜토리얼'']

참조

[1] 웹사이트 GDB Documentation - Supported Languages https://web.archive.[...] 2011-11-28
[2] 웹사이트 GDB Documentation - Summary https://web.archive.[...] 2011-11-28
[3] 웹사이트 Richard Stallman lecture at the Royal Institute of Technology, Sweden (1986-10-30) https://www.gnu.org/[...] 2006-09-21
[4] 웹사이트 John Gilmore (activist) https://web.archive.[...] 2020-10-13
[5] 웹사이트 GDB Steering Committee https://www.gnu.org/[...] 2008-05-11
[6] 웹사이트 GDB Documentation - Summary - Contributors https://web.archive.[...] 2011-12-01
[7] 웹사이트 GDB 7.0 Release Notes http://sourceware.or[...] 2011-11-28
[8] 웹사이트 GDB 7.8 released! https://sourceware.o[...] 2014-07-29
[9] 웹사이트 Reverse Debugging with GDB https://www.gnu.org/[...] 2014-01-20
[10] 웹사이트 Howto: GDB Remote Serial Protocol: Writing a RSP Server http://www.embecosm.[...]
[11] 웹사이트 Implementing a remote stub http://davis.lbl.gov[...]
[12] 웹사이트 Kernel debugging with Dcons http://www.freebsd.o[...]
[13] 웹사이트 GDB 12.1 released! https://lists.gnu.or[...] 2022-05-01
[14] 웹사이트 GDB Documentation - Supported Languages http://sourceware.or[...] 2011-11-28
[15] 웹사이트 GDB Documentation - Summary http://sourceware.or[...] 2011-11-28
[16] 웹사이트 Richard Stallman lecture at the Royal Institute of Technology, Sweden (1986-10-30) https://www.gnu.org/[...] 2006-09-21
[17] 웹사이트 John Gilmore (activist) https://hyperleap.co[...] 2020-10-19
[18] 웹사이트 GDB Steering Committee https://www.gnu.org/[...] 2008-05-11
[19] 웹사이트 GDB Documentation - Summary - Contributors http://sourceware.or[...] 2011-12-01
[20] 웹사이트 GDB 7.0 Release Notes http://sourceware.or[...] 2011-11-28
[21] 웹사이트 GDB 7.8 released! https://sourceware.o[...] 2014-07-29
[22] 웹사이트 Reverse Debugging with GDB https://www.gnu.org/[...] 2014-01-20
[23] 웹사이트 Howto: GDB Remote Serial Protocol: Writing a RSP Server http://www.embecosm.[...] 2020-10-19
[24] 웹사이트 Implementing a remote stub http://davis.lbl.gov[...] 2020-10-19
[25] 웹사이트 Kernel debugging with Dcons http://www.freebsd.o[...] 2020-10-19
[26] 웹사이트 10.6 Examining Memory https://sourceware.o[...] 2020-12-30



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com