-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbug.txt
139 lines (112 loc) · 7.12 KB
/
bug.txt
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
--- [01] Lỗi xử lý tokens: FIXED ⭐
calculate (x + 1) // Tokens: '(x', '+', '1)' -> Phân tích sai
=> Buộc phải viết là calculate ( x + 1 ) -> Bất tiện
=> Như vậy các dấu ngoặc và toán tử tách thành token riêng
--> [XỬ LÝ TOKENS KIỂU MỚI]
Token sẽ là dấu phẩy, dấu ngoặc, kí tự liền nhau hoặc là toán tử, hoặc là quote
Ví dụ: function f(x) "x*x" => tokens: ["function", "f", "(", "x", ",", "y", ")", "\"x + y\""]
>>> (01) Thêm tính năng định nghĩa hàm: UPDATED 📌
Cú pháp: function f(x) "x*x"
Hàm nhiều biến: function f(x, y, z) "x + y + z"
--- [02] Lỗi hàm có tham số trùng nhau: FIXED ⭐
function h(x, x) "x"
evaluate h 1 2 // Kết quả in ra: 1
--> [KHÔNG CHO PHÉP ĐỊNH NGHĨA HÀM NHƯ VẬY]
--- [03] Lỗi không tính được giá trị hàm khi biểu thức có biến toàn cục: FIXED ⭐
set_env z 2
function h(x) "x + z"
evaluate h 1 // Không tính được
--> [CHO PHÉP LẤY GIÁ TRỊ BIẾN MÔI TRƯỜNG GÁN VÀO]
--- [04] Lỗi khi truyền giá trị cụ thể: FIXED ⭐
function f(1) "1 + 1" // Không được định nghĩa như vậy
--> [KHÔNG CHO PHÉP ĐỊNH NGHĨA HÀM NHƯ VẬY]
--- [05] Lỗi khi truyền toán tử: FIXED ⭐
function f(x+y,z)
function f(f(x))
function f(())
--> [KHÔNG CHO PHÉP ĐỊNH NGHĨA HÀM NHƯ VẬY]
--- [06] Lỗi không thể dừng tiến trình: SOLVED ✅
start notepad.exe // notepad lúc này có PID
terminate PID của notepad // -> Không được trên Windows 11 | Được trên Windows 10
--> [SỰ KHÁC BIỆT CỦA WINDOWS 11]
Khi bắt đầu 1 tiến trình, nó tạo ra tiến trình con (hiển thị notepad) rồi lập tức kết thúc
Như vậy muốn dừng tiến trình notepad, phải tìm PID của tiến trình con nó tạo ra và sử dụng PID đó.
--- [07] Lỗi không hiện tiến trình con trên Task Manager: SOLVED ✅
start_child // -> Tìm trong Task Manager (Windows 11) không thấy child_process là tiến trình con của main.exe
Hơn nữa, main.exe nằm ở Background Processes thay vì Apps
--> [CÁCH TASK MANAGER LIỆT KÊ TIẾN TRÌNH]
Task Manage liệt kê tiến trình và nhóm tiến trình không đúng.
Để kiểm tra child_process có là tiến trình con của main không thì tìm PID tất cả tiến trình con của main
Và kết quả là child_process có là tiến trình con của main, nhưng không được liệt kê
--- [08] Lỗi không chạy được foreground: SOLVED ✅
start_foreground notepad.exe // Không thấy foreground, shell vẫn chuyển đến dòng mới mà không đợi notepad tắt
--> [SỰ KHÁC BIỆT CỦA WINDOWS 11]
Như [06], khi notepad được khởi động, nó là tiến trình cha và tạo 1 tiến trình con rồi lập tức kết thúc
Muốn đợi notepad, ta sẽ đợi mọi tiến trình con của nó tạo ra kết thúc, thay vì chỉ đợi nó
>>> (02) Xử lý Ctrl + C: UPDATED 📌
--- [09] Lỗi liên quan đến Ctrl + C: FIXED ⭐
Khi shell đang bắt đầu dòng 'tiny_shell>' mà ấn Ctrl + C thì bị thoát
Trong shell khởi động foreground chính shell (start_foreground main.exe) và ấn Ctrl + C
-> Bị in ra vài lần từ 'tiny_shell>' trước khi trở về shell cha
--> [CÁCH XỬ LÝ TÍN HIỆU CTRL + C]
Xem chi tiết trong main.cpp hiện tại
--- [10] Lỗi tô màu cho syntax: UNSOLVED | REMOVED ❌
Tính năng đọc lệnh realtime và chuyển màu nếu gặp phải từ khóa mà shell hỗ trợ
Ví dụ: function thì gõ đến function sẽ chuyển vàng
-> Làm lỗi nhận tín hiệu Ctrl + C
-> Vẫn không giải quyết được, tính năng đã bị loại bỏ
--- [11] Lỗi gán biến đã có giá trị cho biến mới: FIXED ⭐
set_env x 1
set_env y x
print_env y // -> y = x (x là kí tự trong khi x đang có giá trị 1)
--> [KIỂM TRA GIÁ TRỊ GÁN CHO CÓ LÀ BIẾN MÔI TRƯỜNG KHÔNG]
--- [12] Lỗi định nghĩa hàm không tham số: FIXED ⭐
function f() "1"
funtion f(,) "1"
evaluate f
--> [KHÔNG CHO PHÉP ĐỊNH NGHĨA HÀM NHƯ VẬY]
--- [13] Lỗi đọc sai biểu thức điều kiện với dấu so sánh bằng: FIXED ⭐
if (1 + 1 + 1 = = 3): help else dir // -> Xử lý được
if (1+1+1 = = 3): help else dir // -> Xử lý được
if (1 + 1 + 1 == 3): help else dir // -> Gặp lỗi
--> [CÁCH XỬ LÝ TOÁN TỬ SO SÁNH TRONG LỆNH ĐIỀU KIỆN]
>>> (03) Chỉnh sửa cú pháp định nghĩa hàm đơn giản hơn: UPDATED 📌
Cũ: function f(x) "x*x"
Mới: function f(x) = x*x
--- [14] Lỗi khi set biến môi trường: SOLVED ✅ | FIXED: ⭐
set_env x + // -> Không cho set như này
set_env a 1
set_env b 2
set_env c a + b
print_env c // c = 1 -> Cần ra c = 3
set_env m m // Chạy bình thường -> Cần sửa lại
print_env m // m = m
--> [CHẤP NHẬN TÍNH NĂNG]
Việc xử lý gán biểu thức cho biến tương đối khó và phải can thiệp vào variables.h
Chấp nhận đây là một hạn chế của shell, shell không thể giống như ngôn ngữ lập trình đầy đủ
>>> (04) Cho phép gán biến môi trường bằng biểu thức: UPDATED 📌
Cũ: <var> <value>
Mới: <var> = <value> hoặc <var> = <expression>
--- [15] Lỗi không tạo được Folder: FIXED ⭐
create "New Folder" // -> Không hoạt động
delete "New Folder" // -> Không hoạt động
--> [CHỈNH SỬA CÁCH XỬ LÝ TOKEN LÀ QUOTE]
--- [16] Lỗi không đọc đúng số thập phân: SOLVED ✅
calculate 11 / 2 - 5.5 // Variable 5.5 not set
--> [CHẤP NHẬN TÍNH NĂNG]
Shell không thể hoàn thiện được như Python
--- [17] Lỗi Ctrl + C làm dừng tiến trình countdown chạy background: SOLVED: ✅ | FIXED: ⭐
--> [CHỈNH SỬA CÁCH NHẬN TÍN HIỆU]
Do countdown.exe chia sẻ cùng console với tiến trình cha nên nó cũng chịu ảnh hưởng từ tiến trình cha
Dùng tham số 'CREATE_NEW_PROCESS_GROUP' để tiến trình con tạo ra trong 1 nhóm tiến trình mới
>>> (05) Cập nhật tính năng mới cho phép định nghĩa từ viết tắt cho lệnh: UPDATED 📌
>>> (06) Tính năng tính toán nâng cao, đổi hệ cơ số: UPDATED 📌
>>> (07) Tính năng bookmark lưu danh sách đường dẫn tắt: UPDATED 📌
>>> (08) Tính năng lập lịch cho câu lệnh chạy sau một thời gian: UPDATED 📌
### TEMPLATE BUG RECORD ###
--- [STT] Mô tả lỗi: [ĐÃ FIX HAY CHƯA? UPDATED 📌 | SOLVED: ✅ | FIXED: ⭐ | REMOVED: ❌]
SOLVED: Đã giải thích được nguyên nhân, đây không phải lỗi
FIXED: Đã công nhận là lỗi và đã sửa, kèm theo cách giải quyết
REMOVED: Không thể tìm được nguyên nhân, không thể giải thích nên đã loại bỏ phần chứa lỗi và các phần liên quan đến lỗi
[Tab: 4 spaces] Dòng lệnh gây lỗi
--> [CÁCH GIẢI QUYẾT]