Skip to content

Commit 0d2c65f

Browse files
committed
translate to english
1 parent 8dbe4bc commit 0d2c65f

10 files changed

Lines changed: 243 additions & 58 deletions

gdb_hello_core.ko.sh

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/bash
2+
3+
# 이 스크립트는 지정된 core 덤프 파일을 gdb로 분석하기 위해 실행됩니다.
4+
5+
set -euo pipefail
6+
7+
# 작업 디렉터리 및 실행 파일 경로 설정
8+
WORKDIR="/home/jaytwo/workspace/coredump-workspace"
9+
EXEC="${WORKDIR}/hello"
10+
11+
# 인자 확인
12+
if [ $# -ne 1 ]; then
13+
echo "사용법: $0 <core_dump_file>"
14+
echo "예: $0 core.hello.18078.1766666152"
15+
exit 1
16+
fi
17+
# core.프로그램이름.프로세스아이디.시간에서 시간정보 얻는 방법은 date -d "@시간" 으로 변환 가능
18+
# date -d "@1766666152" '+%Y-%m-%d %H:%M:%S %Z'
19+
# 또는 ./list_core_with_time.sh 스크립트를 사용한다.
20+
21+
CORE_FILE="$1"
22+
23+
# 경로 이동
24+
cd "${WORKDIR}"
25+
26+
# core 파일 존재 확인
27+
if [ ! -f "${CORE_FILE}" ]; then
28+
echo "오류: core 파일이 존재하지 않습니다: ${CORE_FILE}"
29+
exit 1
30+
fi
31+
32+
# 실행 파일 확인
33+
if [ ! -x "${EXEC}" ]; then
34+
echo "오류: 실행 파일이 존재하지 않거나 실행 불가: ${EXEC}"
35+
exit 1
36+
fi
37+
38+
echo "gdb 실행:"
39+
echo " exe : ${EXEC}"
40+
echo " core: ${CORE_FILE}"
41+
echo
42+
43+
# gdb 실행
44+
gdb "${EXEC}" "${CORE_FILE}"
45+

gdb_hello_core.sh

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
#!/bin/bash
22

3-
# 이 스크립트는 지정된 core 덤프 파일을 gdb로 분석하기 위해 실행됩니다.
3+
# This script runs gdb to analyze the specified core dump file.
44

55
set -euo pipefail
66

7-
# 작업 디렉터리 및 실행 파일 경로 설정
7+
# Set working directory and executable path
88
WORKDIR="/home/jaytwo/workspace/coredump-workspace"
99
EXEC="${WORKDIR}/hello"
1010

11-
# 인자 확인
11+
# Check arguments
1212
if [ $# -ne 1 ]; then
13-
echo "사용법: $0 <core_dump_file>"
14-
echo "예: $0 core.hello.18078.1766666152"
13+
echo "Usage: $0 <core_dump_file>"
14+
echo "Example: $0 core.hello.18078.1766666152"
1515
exit 1
1616
fi
17-
# core.프로그램이름.프로세스아이디.시간에서 시간정보 얻는 방법은 date -d "@시간" 으로 변환 가능
18-
# date -d "@1766666152" '+%Y-%m-%d %H:%M:%S %Z'
19-
# 또는 ./list_core_with_time.sh 스크립트를 사용한다.
17+
# To get the time info from core.<program>.<pid>.<timestamp>, use date -d "@timestamp" to convert.
18+
# Example: date -d "@1766666152" '+%Y-%m-%d %H:%M:%S %Z'
19+
# Or use the ./list_core_with_time.sh script.
2020

2121
CORE_FILE="$1"
2222

23-
# 경로 이동
23+
# Change directory
2424
cd "${WORKDIR}"
2525

26-
# core 파일 존재 확인
26+
# Check if core file exists
2727
if [ ! -f "${CORE_FILE}" ]; then
28-
echo "오류: core 파일이 존재하지 않습니다: ${CORE_FILE}"
28+
echo "Error: core file does not exist: ${CORE_FILE}"
2929
exit 1
3030
fi
3131

32-
# 실행 파일 확인
32+
# Check if executable exists
3333
if [ ! -x "${EXEC}" ]; then
34-
echo "오류: 실행 파일이 존재하지 않거나 실행 불가: ${EXEC}"
34+
echo "Error: executable does not exist or is not executable: ${EXEC}"
3535
exit 1
3636
fi
3737

38-
echo "gdb 실행:"
38+
echo "Run gdb:"
3939
echo " exe : ${EXEC}"
4040
echo " core: ${CORE_FILE}"
4141
echo
4242

43-
# gdb 실행
43+
# Run gdb
4444
gdb "${EXEC}" "${CORE_FILE}"
4545

list_core_with_time.ko.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
# 이 스크립트는 현재 디렉터리에서 시간 정보(%t)가 포함된 core 파일들을 찾아서
4+
# 각 파일명과 해당 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하여 출력합니다.
5+
6+
set -euo pipefail
7+
8+
shopt -s nullglob
9+
10+
FOUND=0
11+
12+
for f in core.*; do
13+
# 마지막 '.' 이후를 timestamp로 간주
14+
ts="${f##*.}"
15+
16+
# 숫자인지 확인
17+
if [[ "$ts" =~ ^[0-9]+$ ]]; then
18+
# epoch → 사람이 읽는 시간
19+
human_time="$(date -d "@$ts" '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo '변환 실패')"
20+
21+
printf "%-40s %s\n" "$f" "$human_time"
22+
FOUND=1
23+
fi
24+
done
25+
26+
if [ "$FOUND" -eq 0 ]; then
27+
echo "현재 디렉터리에 시간 정보(%t)가 포함된 core 파일이 없습니다."
28+
fi
29+

list_core_with_time.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22

3-
# 이 스크립트는 현재 디렉터리에서 시간 정보(%t)가 포함된 core 파일들을 찾아서
4-
# 각 파일명과 해당 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하여 출력합니다.
3+
# This script finds core files in the current directory that include timestamp (%t),
4+
# and prints each filename with its timestamp converted to a human-readable format.
55

66
set -euo pipefail
77

@@ -10,20 +10,20 @@ shopt -s nullglob
1010
FOUND=0
1111

1212
for f in core.*; do
13-
# 마지막 '.' 이후를 timestamp로 간주
13+
# Treat the part after the last '.' as the timestamp
1414
ts="${f##*.}"
1515

16-
# 숫자인지 확인
16+
# Check if it is a number
1717
if [[ "$ts" =~ ^[0-9]+$ ]]; then
18-
# epoch → 사람이 읽는 시간
19-
human_time="$(date -d "@$ts" '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo '변환 실패')"
18+
# Convert epoch to human-readable time
19+
human_time="$(date -d "@$ts" '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || echo 'Conversion failed')"
2020

2121
printf "%-40s %s\n" "$f" "$human_time"
2222
FOUND=1
2323
fi
2424
done
2525

2626
if [ "$FOUND" -eq 0 ]; then
27-
echo "현재 디렉터리에 시간 정보(%t)가 포함된 core 파일이 없습니다."
27+
echo "No core files with timestamp (%t) found in the current directory."
2828
fi
2929

run_hello_with_core.ko.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
# 이 스크립트는 hello 프로그램을 실행하여 코어 덤프를 생성합니다.
4+
#
5+
# 이 스크립트를 사용하기 전에, setup_core_dump_systemwide.sh 스크립트를 통해
6+
# 시스템 전역 코어 덤프 설정을 해야 합니다.
7+
# 설정하지 않으면 coredump 파일이 생성되지 않습니다.
8+
9+
set -euo pipefail
10+
11+
# 작업 디렉터리 및 실행 파일 경로 설정
12+
WORKDIR="/home/jaytwo/workspace/coredump-workspace"
13+
EXEC="${WORKDIR}/hello"
14+
15+
cd "${WORKDIR}"
16+
17+
# 코어 덤프 허용 (현재 쉘/프로세스에만 적용)
18+
ulimit -c unlimited
19+
20+
# ASAN/UBSAN 설정 (필요시)
21+
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
22+
export UBSAN_OPTIONS="halt_on_error=1:abort_on_error=1"
23+
24+
# 실행
25+
"${EXEC}"
26+
27+
# 정상 종료면 여기까지 옴(크래시 시에는 보통 도달하지 않음)
28+
echo "프로그램이 정상 종료되었습니다."
29+

run_hello_with_core.sh

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
#!/bin/bash
22

3-
# 이 스크립트는 hello 프로그램을 실행하여 코어 덤프를 생성합니다.
4-
#
5-
# 이 스크립트를 사용하기 전에, setup_core_dump_systemwide.sh 스크립트를 통해
6-
# 시스템 전역 코어 덤프 설정을 해야 합니다.
7-
# 설정하지 않으면 coredump 파일이 생성되지 않습니다.
3+
# This script runs the hello program to generate a core dump.
4+
#
5+
# Before using this script, you must configure system-wide core dump settings
6+
# using the setup_core_dump_systemwide.sh script.
7+
# If not configured, coredump files will not be created.
88

99
set -euo pipefail
1010

11-
# 작업 디렉터리 및 실행 파일 경로 설정
11+
# Set working directory and executable path
1212
WORKDIR="/home/jaytwo/workspace/coredump-workspace"
1313
EXEC="${WORKDIR}/hello"
1414

1515
cd "${WORKDIR}"
1616

17-
# 코어 덤프 허용 (현재 쉘/프로세스에만 적용)
17+
# Allow core dumps (applies only to current shell/process)
1818
ulimit -c unlimited
1919

20-
# ASAN/UBSAN 설정 (필요시)
20+
# ASAN/UBSAN settings (if needed)
2121
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
2222
export UBSAN_OPTIONS="halt_on_error=1:abort_on_error=1"
2323

24-
# 실행
24+
# Run
2525
"${EXEC}"
2626

27-
# 정상 종료면 여기까지 옴(크래시 시에는 보통 도달하지 않음)
28-
echo "프로그램이 정상 종료되었습니다."
27+
# If the program exits normally, it reaches here (usually not reached on crash)
28+
echo "Program exited normally."
2929

run_hello_with_core_daemon.ko.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/bin/bash
2+
3+
# 이 스크립트는 hello 프로그램을 데몬 형태로 실행하여
4+
# 프로그램이 종료될 때마다 재시작합니다.
5+
#
6+
# 이 스크립트를 사용하기 전에, setup_core_dump_systemwide.sh 스크립트를 통해
7+
# 시스템 전역 코어 덤프 설정을 해야 합니다.
8+
# 설정하지 않으면 coredump 파일이 생성되지 않습니다.
9+
10+
set -euo pipefail
11+
12+
# 작업 디렉터리 및 실행 파일 경로, 로그 파일 경로 설정
13+
WORKDIR="/home/jaytwo/workspace/coredump-workspace"
14+
EXEC="${WORKDIR}/hello"
15+
LOG="${WORKDIR}/hello_daemon.log"
16+
17+
cd "${WORKDIR}"
18+
19+
# 코어 덤프 허용 (이 스크립트가 실행하는 hello에 적용)
20+
ulimit -c unlimited
21+
22+
# ASAN/UBSAN 설정 (필요시)
23+
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
24+
export UBSAN_OPTIONS="halt_on_error=1:abort_on_error=1"
25+
26+
# 데몬 시작 로그 기록
27+
echo "[$(date '+%F %T')] daemon start" >> "${LOG}"
28+
29+
# 로그 파일 크기 제한: 10MB 초과 시 최근 10000줄만 남김
30+
MAX_LOG_SIZE=10485760 # 10MB
31+
MAX_LOG_LINES=10000
32+
if [ -f "${LOG}" ] && [ $(stat -c%s "${LOG}") -ge $MAX_LOG_SIZE ]; then
33+
tail -n $MAX_LOG_LINES "${LOG}" > "${LOG}.tmp" && mv "${LOG}.tmp" "${LOG}"
34+
echo "[$(date '+%F %T')] log trimmed to last $MAX_LOG_LINES lines" >> "${LOG}"
35+
fi
36+
37+
while true; do
38+
39+
# 실행 시작 로그 기록
40+
echo "[$(date '+%F %T')] starting hello" >> "${LOG}"
41+
42+
# 실행
43+
"${EXEC}"
44+
rc=$?
45+
46+
# 종료 로그 기록
47+
echo "[$(date '+%F %T')] hello exited rc=${rc}" >> "${LOG}"
48+
49+
# 너무 빠른 재시작 방지
50+
sleep 600 # seconds
51+
52+
# NOTE: crash에 의한 소프트웨어 정지가 원인일 확률이 높으며,
53+
# 그럴 경우 재시작하여도 동일한 문제가 반복될 수 있습니다.
54+
# 이 점 유의하시기 바랍니다.
55+
done
56+
57+

run_hello_with_core_daemon.sh

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
#!/bin/bash
22

3-
# 이 스크립트는 hello 프로그램을 데몬 형태로 실행하여
4-
# 프로그램이 종료될 때마다 재시작합니다.
5-
#
6-
# 이 스크립트를 사용하기 전에, setup_core_dump_systemwide.sh 스크립트를 통해
7-
# 시스템 전역 코어 덤프 설정을 해야 합니다.
8-
# 설정하지 않으면 coredump 파일이 생성되지 않습니다.
3+
# This script runs the hello program as a daemon,
4+
# restarting it every time it exits.
5+
#
6+
# Before using this script, you must configure system-wide core dump settings
7+
# using the setup_core_dump_systemwide.sh script.
8+
# If not configured, coredump files will not be created.
99

1010
set -euo pipefail
1111

12-
# 작업 디렉터리 및 실행 파일 경로, 로그 파일 경로 설정
12+
# Set working directory, executable path, and log file path
1313
WORKDIR="/home/jaytwo/workspace/coredump-workspace"
1414
EXEC="${WORKDIR}/hello"
1515
LOG="${WORKDIR}/hello_daemon.log"
1616

1717
cd "${WORKDIR}"
1818

19-
# 코어 덤프 허용 (이 스크립트가 실행하는 hello에 적용)
19+
# Allow core dumps (applies to hello run by this script)
2020
ulimit -c unlimited
2121

22-
# ASAN/UBSAN 설정 (필요시)
22+
# ASAN/UBSAN settings (if needed)
2323
export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0"
2424
export UBSAN_OPTIONS="halt_on_error=1:abort_on_error=1"
2525

26-
# 데몬 시작 로그 기록
26+
# Log daemon start
2727
echo "[$(date '+%F %T')] daemon start" >> "${LOG}"
2828

29-
# 로그 파일 크기 제한: 10MB 초과 시 최근 10000줄만 남김
29+
# Limit log file size: if over 10MB, keep only the last 10,000 lines
3030
MAX_LOG_SIZE=10485760 # 10MB
3131
MAX_LOG_LINES=10000
3232
if [ -f "${LOG}" ] && [ $(stat -c%s "${LOG}") -ge $MAX_LOG_SIZE ]; then
@@ -36,17 +36,17 @@ fi
3636

3737
while true; do
3838

39-
# 실행 시작 로그 기록
39+
# Log start of execution
4040
echo "[$(date '+%F %T')] starting hello" >> "${LOG}"
4141

42-
# 실행
42+
# Run
4343
"${EXEC}"
4444
rc=$?
4545

46-
# 종료 로그 기록
46+
# Log exit
4747
echo "[$(date '+%F %T')] hello exited rc=${rc}" >> "${LOG}"
4848

49-
# 너무 빠른 재시작 방지
49+
# Prevent too rapid restarts
5050
sleep 600 # seconds
5151

5252
# NOTE: crash에 의한 소프트웨어 정지가 원인일 확률이 높으며,

setup_core_dump_systemwide.ko.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
# 이 스크립트는 sudo 로 실행 되어야 합니다.
6+
# root 권한 확인
7+
if [ "$EUID" -ne 0 ]; then
8+
echo "오류: 이 스크립트는 sudo (root 권한)로 실행해야 합니다."
9+
echo "예: sudo $0"
10+
exit 1
11+
fi
12+
13+
# core 파일을 실행 디렉터리에 생성: core.<exe>.<pid>.<time>
14+
CORE_PATTERN="core.%e.%p.%t"
15+
# time 정보 읽는 예제: date -d @1735123456 '+%Y-%m-%d %H:%M:%S %Z'
16+
17+
# systemd-coredump 파이프 대신 파일로 생성하도록 전역 설정
18+
sysctl -w kernel.core_pattern="${CORE_PATTERN}"
19+
20+
# (권장) core 덤프 파일 이름에 pid를 붙이므로 기존 덤프 덮어쓰기 위험 줄어듦
21+
# core 파일 권한/경로는 프로세스 권한 및 실행 디렉터리 권한에 따릅니다.
22+
23+
echo "OK: kernel.core_pattern=${CORE_PATTERN}"
24+
echo "NOTE: 이 설정은 시스템 전역이며 재부팅 후에도 유지될 수 있습니다(배포판 설정에 따라 다름)."
25+

0 commit comments

Comments
 (0)