microsoft / microsoft/vscode-cpptools

-exec awatch triggers unknown exceptions

Đang mở
#14,031 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

bug debugger help wanted
Ngôn ngữ chính
TypeScript
Star
6.2k
Fork
1.7k
Merge trung bình
14 giờ 46 phút
Pull request đã merge (30 ngày)
61

Mô tả

Environment
  • OS and version: Manjaro Linux 25
  • VS Code: 1.105.1
  • C/C++ extension: 1.28.3
  • OS and version of remote machine (if applicable): Windows 11 25H2
  • GDB / LLDB version: 16.3
Bug Summary and Steps to Reproduce

Bug Summary:

-exec awatch triggers unknown exceptions

#include <cstdio>
#include <string>
#include <windows.h>
int main(int argc, char *argv[]) {
    int a = 123;
    int b = a;
    a += 1;
    printf("Hello, World! %d\n", a);
}

Steps to reproduce:

  1. set breakpoint at line 6 then start debug windows exe
  2. -exec awatch a
  3. F10
Debugger Configurations
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${command:cmake.launchTargetPath}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerServerAddress": "private:2345",
            "preLaunchTask": "deploy",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "logging": {
                "engineLogging": true,
                "trace": true,
                "traceResponse": true
            }
        }
    ]
}
Debugger Logs
<--   C (next-18): {"command":"next","arguments":{"threadId":5148},"type":"request","seq":18}
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7966) <-1036-exec-next --thread 1 --frame 0 \n"},"seq":536}
1: (7966) <-1036-exec-next --thread 1 --frame 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7967) ->1036^running\n"},"seq":538}
1: (7967) ->1036^running
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7967) ->*running,thread-id=\"all\"\n"},"seq":540}
1: (7967) ->*running,thread-id="all"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7968) 1036: elapsed time 1\n"},"seq":542}
1: (7968) 1036: elapsed time 1
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7970) ->(gdb)\n"},"seq":545}
1: (7970) ->(gdb)
--> R (next-18): {"type":"response","request_seq":18,"success":true,"command":"next","body":{},"seq":544}
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7971) ->=breakpoint-modified,bkpt={number=\"4\",type=\"acc watchpoint\",disp=\"keep\",enabled=\"y\",what=\"a\",thread-groups=[\"i1\"],times=\"1\",original-location=\"a\"}\n"},"seq":548}
1: (7971) ->=breakpoint-modified,bkpt={number="4",type="acc watchpoint",disp="keep",enabled="y",what="a",thread-groups=["i1"],times="1",original-location="a"}
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->~\"\\n\"\n"},"seq":550}
1: (7974) ->~"\n"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->~\"Thread 1 hit Hardware access (read/write) watchpoint 4: a\\n\"\n"},"seq":552}
1: (7974) ->~"Thread 1 hit Hardware access (read/write) watchpoint 4: a\n"
--> E (output): {"type":"event","event":"output","body":{"category":"stdout","output":"\n"},"seq":553}

--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->~\"\\n\"\n"},"seq":556}
1: (7974) ->~"\n"
--> E (output): {"type":"event","event":"output","body":{"category":"stdout","output":"Thread 1 hit Hardware access (read/write) watchpoint 4: a\n"},"seq":559}
Thread 1 hit Hardware access (read/write) watchpoint 4: a
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->~\"Value = 123\\n\"\n"},"seq":558}
1: (7974) ->~"Value = 123\n"
--> E (output): {"type":"event","event":"output","body":{"category":"stdout","output":"\n"},"seq":562}

--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->~\"0x00007ff670e3155e in main (argc=1, argv=0x7d90f0) at /home/allen/\\346\\241\\214\\351\\235\\242/test_cpp/main.cc:6\\n\"\n"},"seq":564}
1: (7974) ->~"0x00007ff670e3155e in main (argc=1, argv=0x7d90f0) at /home/allen/\346\241\214\351\235\242/test_cpp/main.cc:6\n"
--> E (output): {"type":"event","event":"output","body":{"category":"stdout","output":"Value = 123\n"},"seq":566}
Value = 123
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->~\"6\\t    int b = a;\\n\"\n"},"seq":568}
1: (7974) ->~"6\t    int b = a;\n"
--> E (output): {"type":"event","event":"output","body":{"category":"stdout","output":"0x00007ff670e3155e in main (argc=1, argv=0x7d90f0) at /home/allen/桌面/test_cpp/main.cc:6\n"},"seq":570}
0x00007ff670e3155e in main (argc=1, argv=0x7d90f0) at /home/allen/桌面/test_cpp/main.cc:6
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7974) ->*stopped,hw-awpt={number=\"4\",exp=\"a\"},reason=\"access-watchpoint-trigger\",value={new=\"123\"},frame={addr=\"0x00007ff670e3155e\",func=\"main\",args=[{name=\"argc\",value=\"1\"},{name=\"argv\",value=\"0x7d90f0\"}],file=\"/home/allen/\\346\\241\\214\\351\\235\\242/test_cpp/main.cc\",fullname=\"/home/allen/\\346\\241\\214\\351\\235\\242/test_cpp/main.cc\",line=\"6\",arch=\"i386:x86-64\"},thread-id=\"1\",stopped-threads=\"all\"\n"},"seq":572}
1: (7974) ->*stopped,hw-awpt={number="4",exp="a"},reason="access-watchpoint-trigger",value={new="123"},frame={addr="0x00007ff670e3155e",func="main",args=[{name="argc",value="1"},{name="argv",value="0x7d90f0"}],file="/home/allen/\346\241\214\351\235\242/test_cpp/main.cc",fullname="/home/allen/\346\241\214\351\235\242/test_cpp/main.cc",line="6",arch="i386:x86-64"},thread-id="1",stopped-threads="all"
--> E (output): {"type":"event","event":"output","body":{"category":"stdout","output":"6\t    int b = a;\n"},"seq":574}
6	    int b = a;
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7975) <-1037-stack-list-frames --thread 1 0 1000\n"},"seq":576}
1: (7975) <-1037-stack-list-frames --thread 1 0 1000
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7976) ->1037^done,stack=[frame={level=\"0\",addr=\"0x00007ff670e3155e\",func=\"main\",file=\"/home/allen/\\346\\241\\214\\351\\235\\242/test_cpp/main.cc\",fullname=\"/home/allen/\\346\\241\\214\\351\\235\\242/test_cpp/main.cc\",line=\"6\",arch=\"i386:x86-64\"}]\n"},"seq":578}
1: (7976) ->1037^done,stack=[frame={level="0",addr="0x00007ff670e3155e",func="main",file="/home/allen/\346\241\214\351\235\242/test_cpp/main.cc",fullname="/home/allen/\346\241\214\351\235\242/test_cpp/main.cc",line="6",arch="i386:x86-64"}]
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7976) ->(gdb)\n"},"seq":580}
1: (7976) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7976) 1037: elapsed time 0\n"},"seq":582}
1: (7976) 1037: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7977) <-1038-var-delete var1\n"},"seq":584}
1: (7977) <-1038-var-delete var1
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7977) ->1038^done,ndeleted=\"1\"\n"},"seq":586}
1: (7977) ->1038^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7978) ->(gdb)\n"},"seq":588}
1: (7978) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7978) 1038: elapsed time 1\n"},"seq":590}
1: (7978) 1038: elapsed time 1
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7979) <-1039-var-delete var2\n"},"seq":592}
1: (7979) <-1039-var-delete var2
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7979) ->1039^done,ndeleted=\"1\"\n"},"seq":594}
1: (7979) ->1039^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7979) ->(gdb)\n"},"seq":596}
1: (7979) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7979) 1039: elapsed time 0\n"},"seq":598}
1: (7979) 1039: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7979) <-1040-var-delete var3\n"},"seq":600}
1: (7979) <-1040-var-delete var3
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) ->1040^done,ndeleted=\"1\"\n"},"seq":602}
1: (7980) ->1040^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) ->(gdb)\n"},"seq":604}
1: (7980) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) 1040: elapsed time 0\n"},"seq":606}
1: (7980) 1040: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) <-1041-var-delete var4\n"},"seq":608}
1: (7980) <-1041-var-delete var4
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) ->1041^done,ndeleted=\"1\"\n"},"seq":610}
1: (7980) ->1041^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) ->(gdb)\n"},"seq":612}
1: (7980) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) 1041: elapsed time 0\n"},"seq":614}
1: (7980) 1041: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) <-1042-var-delete var5\n"},"seq":616}
1: (7980) <-1042-var-delete var5
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) ->1042^done,ndeleted=\"1\"\n"},"seq":618}
1: (7980) ->1042^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) ->(gdb)\n"},"seq":620}
1: (7980) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7980) 1042: elapsed time 0\n"},"seq":622}
1: (7980) 1042: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) <-1043-var-delete var6\n"},"seq":624}
1: (7981) <-1043-var-delete var6
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) ->1043^done,ndeleted=\"1\"\n"},"seq":626}
1: (7981) ->1043^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) ->(gdb)\n"},"seq":628}
1: (7981) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) 1043: elapsed time 0\n"},"seq":630}
1: (7981) 1043: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) <-1044-var-delete var7\n"},"seq":632}
1: (7981) <-1044-var-delete var7
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) ->1044^done,ndeleted=\"1\"\n"},"seq":634}
1: (7981) ->1044^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) ->(gdb)\n"},"seq":636}
1: (7981) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) 1044: elapsed time 0\n"},"seq":638}
1: (7981) 1044: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) <-1045-var-delete var8\n"},"seq":640}
1: (7981) <-1045-var-delete var8
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) ->1045^done,ndeleted=\"1\"\n"},"seq":642}
1: (7981) ->1045^done,ndeleted="1"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) ->(gdb)\n"},"seq":644}
1: (7981) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7981) 1045: elapsed time 0\n"},"seq":646}
1: (7981) 1045: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7982) Send Event AD7ExceptionEvent\n"},"seq":648}
1: (7982) Send Event AD7ExceptionEvent
--> E (stopped): {"type":"event","event":"stopped","body":{"reason":"exception","threadId":5148,"text":"Unknown stopping event","allThreadsStopped":true,"source":{"name":"main.cc","path":"/home/allen/桌面/test_cpp/main.cc","sources":[],"checksums":[]},"line":6,"column":1},"seq":650}
<--   C (threads-19): {"command":"threads","type":"request","seq":19}
--> R (threads-19): {"type":"response","request_seq":19,"success":true,"command":"threads","body":{"threads":[{"id":5148,"name":" [5148]"},{"id":4552,"name":" [4552]"}]},"seq":653}
<--   C (stackTrace-20): {"command":"stackTrace","arguments":{"threadId":5148,"startFrame":0,"levels":20},"type":"request","seq":20}
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7993) <-1046-stack-list-arguments --thread 1 2 0 0\n"},"seq":656}
1: (7993) <-1046-stack-list-arguments --thread 1 2 0 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7994) ->1046^done,stack-args=[frame={level=\"0\",args=[{name=\"argc\",type=\"int\",value=\"1\"},{name=\"argv\",type=\"char **\",value=\"0x7d90f0\"}]}]\n"},"seq":658}
1: (7994) ->1046^done,stack-args=[frame={level="0",args=[{name="argc",type="int",value="1"},{name="argv",type="char **",value="0x7d90f0"}]}]
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7994) ->(gdb)\n"},"seq":660}
1: (7994) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (7994) 1046: elapsed time 0\n"},"seq":662}
1: (7994) 1046: elapsed time 0
--> R (stackTrace-20): {"type":"response","request_seq":20,"success":true,"command":"stackTrace","body":{"stackFrames":[{"id":1000,"name":"main(int argc, char ** argv)","source":{"name":"main.cc","path":"/home/allen/桌面/test_cpp/main.cc","sources":[],"checksums":[]},"line":6,"column":1,"instructionPointerReference":"0x00007ff670e3155e"}],"totalFrames":1},"seq":664}
<--   C (scopes-21): {"command":"scopes","arguments":{"frameId":1000},"type":"request","seq":21}
--> R (scopes-21): {"type":"response","request_seq":21,"success":true,"command":"scopes","body":{"scopes":[{"presentationHint":"locals","name":"Locals","variablesReference":1000,"expensive":false},{"presentationHint":"registers","name":"Registers","variablesReference":1001,"expensive":true}]},"seq":667}
<--   C (variables-22): {"command":"variables","arguments":{"variablesReference":1000},"type":"request","seq":22}
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8416) <-1047-stack-list-variables --thread 1 --frame 0 0\n"},"seq":670}
1: (8416) <-1047-stack-list-variables --thread 1 --frame 0 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8417) ->1047^done,variables=[{name=\"argc\",arg=\"1\"},{name=\"argv\",arg=\"1\"},{name=\"a\"},{name=\"b\"}]\n"},"seq":672}
1: (8417) ->1047^done,variables=[{name="argc",arg="1"},{name="argv",arg="1"},{name="a"},{name="b"}]
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8417) ->(gdb)\n"},"seq":674}
1: (8417) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8417) 1047: elapsed time 1\n"},"seq":676}
1: (8417) 1047: elapsed time 1
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8417) <-1048-var-create --thread 1 --frame 0  - * \"argc\"\n"},"seq":678}
1: (8417) <-1048-var-create --thread 1 --frame 0  - * "argc"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8418) ->1048^done,name=\"var9\",numchild=\"0\",value=\"1\",type=\"int\",thread-id=\"1\",has_more=\"0\"\n"},"seq":680}
1: (8418) ->1048^done,name="var9",numchild="0",value="1",type="int",thread-id="1",has_more="0"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8418) ->(gdb)\n"},"seq":682}
1: (8418) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8419) 1048: elapsed time 1\n"},"seq":684}
1: (8419) 1048: elapsed time 1
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8419) <-1049-var-create --thread 1 --frame 0  - * \"argv\"\n"},"seq":686}
1: (8419) <-1049-var-create --thread 1 --frame 0  - * "argv"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8420) ->1049^done,name=\"var10\",numchild=\"1\",value=\"0x7d90f0\",type=\"char **\",thread-id=\"1\",has_more=\"0\"\n"},"seq":688}
1: (8420) ->1049^done,name="var10",numchild="1",value="0x7d90f0",type="char **",thread-id="1",has_more="0"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8420) ->(gdb)\n"},"seq":690}
1: (8420) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8420) 1049: elapsed time 0\n"},"seq":692}
1: (8420) 1049: elapsed time 0
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8420) <-1050-var-create --thread 1 --frame 0  - * \"a\"\n"},"seq":694}
1: (8420) <-1050-var-create --thread 1 --frame 0  - * "a"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8421) ->1050^done,name=\"var11\",numchild=\"0\",value=\"123\",type=\"int\",thread-id=\"1\",has_more=\"0\"\n"},"seq":696}
1: (8421) ->1050^done,name="var11",numchild="0",value="123",type="int",thread-id="1",has_more="0"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8421) ->(gdb)\n"},"seq":698}
1: (8421) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8421) 1050: elapsed time 1\n"},"seq":700}
1: (8421) 1050: elapsed time 1
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8421) <-1051-var-create --thread 1 --frame 0  - * \"b\"\n"},"seq":702}
1: (8421) <-1051-var-create --thread 1 --frame 0  - * "b"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8422) ->1051^done,name=\"var12\",numchild=\"0\",value=\"1893982384\",type=\"int\",thread-id=\"1\",has_more=\"0\"\n"},"seq":704}
1: (8422) ->1051^done,name="var12",numchild="0",value="1893982384",type="int",thread-id="1",has_more="0"
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8422) ->(gdb)\n"},"seq":706}
1: (8422) ->(gdb)
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (8422) 1051: elapsed time 0\n"},"seq":708}
1: (8422) 1051: elapsed time 0
--> R (variables-22): {"type":"response","request_seq":22,"success":true,"command":"variables","body":{"variables":[{"name":"a","value":"123","type":"int","evaluateName":"a","variablesReference":0,"memoryReference":"0x000000000000007b"},{"name":"b","value":"1893982384","type":"int","evaluateName":"b","variablesReference":0,"memoryReference":"0x0000000070e3e0b0"},{"name":"argc","value":"1","type":"int","evaluateName":"argc","variablesReference":0,"memoryReference":"0x0000000000000001"},{"name":"argv","value":"0x7d90f0","type":"char **","evaluateName":"argv","variablesReference":1002,"memoryReference":"0x00000000007d90f0"}]},"seq":710}

Other Extensions

No response

Additional Information

No response

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Tái hiện vấn đề với chương trình C++ được cung cấp, đích từ xa Windows, GDB 16.3 và cấu hình khởi chạy được hiển thị. Bắt đầu bằng cách theo dõi cách lệnh -exec awatch a và phản hồi access-watchpoint-trigger được ghi nhật ký được xử lý, sau đó xác minh rằng việc thực hiện từng bước không còn tạo ra ngoại lệ không xác định đã được báo cáo.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
cpp, typescript, vscode
Lĩnh vực
devtools
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
30/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.