در این مطلب، ویدئو اشکال زدایی Segfault های پایتون با gdb (متوسط - پیشرفته) آنتونی #208 را توضیح می دهد با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:11:17
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:03,280 –> 00:00:04,960
سلام و به ویدیوی دیگری خوش آمدید،
2
00:00:04,960 –> 00:00:06,480
در این ویدیو، ما در
3
00:00:06,480 –> 00:00:08,160
مورد اشکال زدایی پایتون به
4
00:00:08,160 –> 00:00:11,280
ویژه c python uh با gdb
5
00:00:11,280 –> 00:00:14,000
uh صحبت خواهیم کرد که گهگاه
6
00:00:14,000 –> 00:00:15,120
7
00:00:15,120 –> 00:00:16,400
اگر با چیزی که به
8
00:00:16,400 –> 00:00:18,560
طرز عجیبی دارای اشکال است، به این نیاز پیدا می کنم. من
9
00:00:18,560 –> 00:00:20,720
واقعاً توضیح خوبی برای آن ندارم
10
00:00:20,720 –> 00:00:22,400
و گاهی اوقات رفتن به gdb و
11
00:00:22,400 –> 00:00:24,160
نگاه کردن به موارد سطح پایین c python
12
00:00:24,160 –> 00:00:25,199
می تواند مفید باشد،
13
00:00:25,199 –> 00:00:27,359
بنابراین می خواهم یک نوع
14
00:00:27,359 –> 00:00:28,240
راه اندازی اولیه و
15
00:00:28,240 –> 00:00:31,279
نحوه اشکال زدایی آن را به شما نشان دهم، بنابراین بیایید پرش کنیم در آن
16
00:00:31,279 –> 00:00:32,479
اوه ما به طور خاص
17
00:00:32,479 –> 00:00:34,800
امروز به بررسی خرابیهای
18
00:00:34,800 –> 00:00:38,079
خراب و برنامههای کرشینگ خواهیم پرداخت،
19
00:00:38,079 –> 00:00:40,480
من فکر میکنم برای بسیاری از موقعیتهای دیگر،
20
00:00:40,480 –> 00:00:41,920
اشکالزدایی عادی پایتون
21
00:00:41,920 –> 00:00:45,360
باید شما را به نمایش بگذارد امروز
22
00:00:45,360 –> 00:00:48,719
من یک پسوند C بسیار ساده را
23
00:00:48,719 –> 00:00:49,840
در اینجا راهاندازی
24
00:00:49,840 –> 00:00:52,879
کردهام. بر روی صفحه قرار می گیرد،
25
00:00:52,879 –> 00:00:54,879
خوب است، ما در اینجا به آن نگاه می کنیم، بنابراین
26
00:00:54,879 –> 00:00:57,280
من فقط یک setup.pi اولیه دارم که
27
00:00:57,280 –> 00:00:57,680
28
00:00:57,680 –> 00:00:59,760
یک نام و یک نسخه دارد و یک ماژول افزونه راه اندازی کرده ام
29
00:00:59,760 –> 00:01:02,719
30
00:01:02,719 –> 00:01:04,080
و بنابراین ماژول این
31
00:01:04,080 –> 00:01:05,760
نام را خواهد داشت. و قرار است در
32
00:01:05,760 –> 00:01:06,320
این
33
00:01:06,320 –> 00:01:09,200
ج اجرا شود فایل و من یک ویدیوی دیگر را با
34
00:01:09,200 –> 00:01:10,840
پسوند c انجام دادم، بنابراین آن را در توضیحات پیوند می دهم
35
00:01:10,840 –> 00:01:13,360
36
00:01:13,360 –> 00:01:15,680
که به جزئیات بیشتر در اینجا می پردازد، اما
37
00:01:15,680 –> 00:01:17,360
این دقیقاً مانند یک برنامه ساده hello world
38
00:01:17,360 –> 00:01:18,880
است اوه، ما به شما نشان خواهیم داد که
39
00:01:18,880 –> 00:01:22,560
در حال اجرا است، اجازه دهید یک مجازی بسازیم. محیط
40
00:01:22,560 –> 00:01:26,080
و نصب dot و
41
00:01:26,080 –> 00:01:29,360
آن میسازد و اگر
42
00:01:29,360 –> 00:01:32,799
نمونه پسوند c را وارد کنیم و سپس نمونه c
43
00:01:32,799 –> 00:01:37,040
extension dot hello world
44
00:01:37,040 –> 00:01:38,640
اوه، میبینید که این تابع را اجرا میکند
45
00:01:38,640 –> 00:01:40,320
که رشتهای را به اینجا
46
00:01:40,320 –> 00:01:42,560
برمیگرداند که همه چیز عالی کار میکند اما حالا
47
00:01:42,560 –> 00:01:43,920
میخواهم به شما نشان دهم مثالی از جایی
48
00:01:43,920 –> 00:01:44,640
که خراب است،
49
00:01:44,640 –> 00:01:49,119
بنابراین من می خواهم یک
50
00:01:49,119 –> 00:01:51,280
اشاره گر تهی در اینجا ایجاد کنم و به آن ارجاع دهم که
51
00:01:51,280 –> 00:01:52,960
باید خطای بخش بندی را به ما بدهد،
52
00:01:52,960 –> 00:01:56,479
ما سعی می کنیم
53
00:01:56,479 –> 00:01:59,920
مقدار null را روی یک تنظیم کنیم و اگر اکنون آن را
54
00:01:59,920 –> 00:02:04,479
پیپ نصب کنیم. و ما python-c را
55
00:02:04,479 –> 00:02:08,479
وارد نمونه c extension می کنیم
56
00:02:08,479 –> 00:02:11,920
و سپس نمونه c extension dot hello
57
00:02:11,920 –> 00:02:13,200
world
58
00:02:13,200 –> 00:02:16,959
اوه، باید یک خطای بخش بندی بگیریم
59
00:02:16,959 –> 00:02:19,440
و اوه گزارشگر خرابی وارد شده است، اما
60
00:02:19,440 –> 00:02:21,040
به هر حال بنابراین باید یک خطای بخش بندی داشته باشیم
61
00:02:21,040 –> 00:02:22,800
62
00:02:22,800 –> 00:02:24,959
و حداقل به طور پیش فرض در دستگاه من
63
00:02:24,959 –> 00:02:26,800
این تولید نمی کند و میگوید هسته
64
00:02:26,800 –> 00:02:27,520
تخلیه شده است،
65
00:02:27,520 –> 00:02:28,800
اما در واقع هستهی دومپ تولید نمیکند،
66
00:02:28,800 –> 00:02:30,959
بنابراین این
67
00:02:30,959 –> 00:02:32,720
اولین بخش از
68
00:02:32,720 –> 00:02:33,599
نحوه اشکالزدایی این است
69
00:02:33,599 –> 00:02:36,239
که اگر بگوید هسته تخلیه شده است، اکنون سیم را بالا
70
00:02:36,239 –> 00:02:37,599
میبریم و شما
71
00:02:37,599 –> 00:02:38,959
یکی نداشته باشید، یک یا دو
72
00:02:38,959 –> 00:02:39,920
مورد ممکن است اتفاق بیفتد،
73
00:02:39,920 –> 00:02:42,000
یا اصلاً یک فایل اصلی تولید نکرده است
74
00:02:42,000 –> 00:02:44,080
یا هسته dump در
75
00:02:44,080 –> 00:02:44,879
مکانی
76
00:02:44,879 –> 00:02:48,160
است که مکان پیشفرض
77
00:02:48,160 –> 00:02:51,280
نیست.
78
00:02:51,280 –> 00:02:53,760
تنظیم برای این
79
00:02:53,760 –> 00:02:58,000
اوه، اجازه دهید در
80
00:02:58,000 –> 00:03:04,720
پروکسی دوم الگوی آکورد هسته پردازش
81
00:03:04,720 –> 00:03:08,560
الگوی هسته،
82
00:03:08,560 –> 00:03:10,319
خوب است، بنابراین این میگوید
83
00:03:10,319 –> 00:03:11,760
که هسته را تخلیه میکند و آن را قرار میدهد و
84
00:03:11,760 –> 00:03:14,879
آن را به پورت برنامه که
85
00:03:14,879 –> 00:03:18,879
نرمافزار گزارش خطا است لوله میکند. در اوبونتو
86
00:03:18,879 –> 00:03:20,560
ام اما ما نمیخواهیم این کار را انجام دهیم،
87
00:03:20,560 –> 00:03:22,159
میخواهیم هسته dump را در فهرست کاری خود
88
00:03:22,159 –> 00:03:23,760
داشته باشیم، بنابراین ما میخواهیم
89
00:03:23,760 –> 00:03:27,040
uh ulimit c نامحدود را
90
00:03:27,040 –> 00:03:28,080
91
00:03:28,080 –> 00:03:31,440
انجام دهیم، که میخواهد بگوییم اندازه حلقهها را محدود نکنید.
92
00:03:31,440 –> 00:03:34,480
ما باید آره خوب باشد، بنابراین اکنون ما
93
00:03:34,480 –> 00:03:35,599
این فایل اصلی را
94
00:03:35,599 –> 00:03:37,599
داریم که شبیه به یک است crash dump
95
00:03:37,599 –> 00:03:39,040
زمانی که برنامه
96
00:03:39,040 –> 00:03:41,760
خطا می کند و شما می توانید از این برای انجام
97
00:03:41,760 –> 00:03:43,280
برخی اشکال زدایی استفاده کنید، بنابراین فرض کنید که
98
00:03:43,280 –> 00:03:44,400
شما یک فایل اصلی
99
00:03:44,400 –> 00:03:46,560
دارید و می خواهید آن را بعد از واقعیت آنالیز کنید
100
00:03:46,560 –> 00:03:48,319
تا واقعاً به
101
00:03:48,319 –> 00:03:49,599
برنامه در حال اجرا دسترسی نداشته
102
00:03:49,599 –> 00:03:51,680
باشید اما به یک خراب دسترسی داشته باشید
103
00:03:51,680 –> 00:03:53,599
کاری که می توانید انجام دهید این است که از gdb
104
00:03:53,599 –> 00:03:56,400
و فایل اجرایی که قبلا در حال اجرا بود
105
00:03:56,400 –> 00:03:57,120
106
00:03:57,120 –> 00:03:59,519
و فایل اصلی استفاده کنید و کاری که انجام می دهد این
107
00:03:59,519 –> 00:04:01,040
است که
108
00:04:01,040 –> 00:04:04,239
شما را به gdb می اندازد و در برخی موارد
109
00:04:04,239 –> 00:04:05,840
منبع کامل را در اینجا
110
00:04:05,840 –> 00:04:08,080
نیز خواهد داشت. از آنجایی که کدی که این را راهاندازی میکند
111
00:04:08,080 –> 00:04:09,760
بسیار نادر است، مثل
112
00:04:09,760 –> 00:04:11,360
اینکه همیشه این um را ندارد و من
113
00:04:11,360 –> 00:04:12,799
بعداً راههایی را به شما نشان
114
00:04:12,799 –> 00:04:15,280
میدهم که احتمال میدهد
115
00:04:15,280 –> 00:04:17,040
منبع واقعی را بدانید،
116
00:04:17,040 –> 00:04:18,320
این یک نوع مفید است چون
117
00:04:18,320 –> 00:04:20,478
شما را وارد gdb میکند، من امروز قصد ندارم
118
00:04:20,478 –> 00:04:22,560
تمام gdb را مرور کنم، میخواهم
119
00:04:22,560 –> 00:04:23,520
دو مورد
120
00:04:23,520 –> 00:04:26,960
اصلی را که برای آن استفاده میکنم به شما نشان دهم یکی bt است
121
00:04:26,960 –> 00:04:29,199
که به شما یک ردیابی برگشتی میدهد
122
00:04:29,199 –> 00:04:30,639
و stack trace را به شما نشان میدهد. از همه چیزهایی
123
00:04:30,639 –> 00:04:31,360
که
124
00:04:31,360 –> 00:04:33,040
نامیده می شوند، می توانید اینجا ببینید که بسیاری از
125
00:04:33,040 –> 00:04:35,520
چیزها opti شده اند به طوری که ما نمی دانیم
126
00:04:35,520 –> 00:04:36,800
ما نمی دانیم این توابع چیست
127
00:04:36,800 –> 00:04:38,639
زیرا آنها در واقع وجود ندارند،
128
00:04:38,639 –> 00:04:40,960
آنها به عنوان یک تابع نامگذاری شده در
129
00:04:40,960 –> 00:04:42,479
کد وجود ندارند، اما آنها بخشی از ردیابی پشته ما
130
00:04:42,479 –> 00:04:44,800
در اینجا هستند
131
00:04:44,800 –> 00:04:46,479
و می توانید شما را ببینید. شروع اصلی اصلی این را بدانید،
132
00:04:46,479 –> 00:04:48,000
اما این
133
00:04:48,000 –> 00:04:50,639
بیشتر
134
00:04:50,639 –> 00:04:53,919
حلقه ارزش اصلی در
135
00:04:53,919 –> 00:04:56,320
پایتون است، البته من یک
136
00:04:56,320 –> 00:04:58,160
بیلد بهینه سازی شده از پایتون را اجرا می کنم و بنابراین
137
00:04:58,160 –> 00:04:59,600
مانند بسیاری از نمادها،
138
00:04:59,600 –> 00:05:01,520
بسیاری از کدها از بین خواهند رفت. از بین رفته است، بنابراین
139
00:05:01,520 –> 00:05:02,639
140
00:05:02,639 –> 00:05:04,240
درک اینکه چه اتفاقی در
141
00:05:04,240 –> 00:05:06,080
حال رخ دادن است کمی سخت تر خواهد بود، اما به هر حال به این ترتیب می توانید از
142
00:05:06,080 –> 00:05:08,080
یک فایل اصلی به اجرای gdb بروید
143
00:05:08,080 –> 00:05:09,840
و چیز دیگری که من به شما نشان خواهم داد این است که q را
144
00:05:09,840 –> 00:05:11,199
ترک کنید،
145
00:05:11,199 –> 00:05:12,960
اما یک کل وجود دارد و یک کل وجود دارد. تعداد زیادی
146
00:05:12,960 –> 00:05:14,639
از چیزهایی که میتوانید برای gdb یاد بگیرید،
147
00:05:14,639 –> 00:05:16,240
من متوجه شدم که این دو
148
00:05:16,240 –> 00:05:17,759
پایهای هستند که میتوانید به
149
00:05:17,759 –> 00:05:19,280
متغیرهای محلی و چیزهای داخل این فایل اصلی نگاه
150
00:05:19,280 –> 00:05:19,759
کنید،
151
00:05:19,759 –> 00:05:21,120
چون اساس