Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6946383

Browse files
sync with cpython 9e38723a
1 parent4f7f32e commit6946383

File tree

103 files changed

+27177
-1040
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+27177
-1040
lines changed

‎howto/argparse.po

Lines changed: 577 additions & 1 deletion
Large diffs are not rendered by default.

‎howto/descriptor.po

Lines changed: 852 additions & 1 deletion
Large diffs are not rendered by default.

‎howto/functional.po

Lines changed: 444 additions & 1 deletion
Large diffs are not rendered by default.

‎howto/gdb_helpers.po

Lines changed: 387 additions & 1 deletion
Large diffs are not rendered by default.

‎howto/instrumentation.po

Lines changed: 266 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ msgid ""
77
msgstr ""
88
"Project-Id-Version:Python 3.12\n"
99
"Report-Msgid-Bugs-To:\n"
10-
"POT-Creation-Date:2024-08-30 18:24+0000\n"
10+
"POT-Creation-Date:2024-09-10 00:04+0000\n"
1111
"PO-Revision-Date:2023-08-17 22:17+0800\n"
1212
"Last-Translator:Matt Wang <mattwang44@gmail.com>\n"
1313
"Language-Team:Chinese - TAIWAN (https://github.com/python/python-docs-zh-"
@@ -94,17 +94,29 @@ msgstr ""
9494
msgid"On a Linux machine, this can be done via::"
9595
msgstr"在 Linux 機器上,這可以透過以下方式完成: ::"
9696

97+
#:../../howto/instrumentation.rst:42
98+
msgid"$ yum install systemtap-sdt-devel"
99+
msgstr""
100+
97101
#:../../howto/instrumentation.rst:44
98102
msgid"or::"
99103
msgstr"或是: ::"
100104

105+
#:../../howto/instrumentation.rst:46
106+
msgid"$ sudo apt-get install systemtap-sdt-dev"
107+
msgstr""
108+
101109
#:../../howto/instrumentation.rst:49
102110
msgid""
103111
"CPython must then be :option:`configured with the --with-dtrace option <--"
104112
"with-dtrace>`:"
105113
msgstr""
106114
"然後 CPython 必須使用\\ :option:`配置 --with-dtrace 選項 <--with-dtrace>`:"
107115

116+
#:../../howto/instrumentation.rst:52
117+
msgid"checking for --with-dtrace... yes"
118+
msgstr""
119+
108120
#:../../howto/instrumentation.rst:56
109121
msgid""
110122
"On macOS, you can list available DTrace probes by running a Python process "
@@ -114,6 +126,28 @@ msgstr ""
114126
"在 macOS 上,你可以透過在後台運行 Python 行程並列出 Python 發布者 (provider) "
115127
"所提供的所有可用探針,以列出可用的 DTrace 探針: ::"
116128

129+
#:../../howto/instrumentation.rst:60
130+
msgid""
131+
"$ python3.6 -q &\n"
132+
"$ sudo dtrace -l -P python$! # or: dtrace -l -m python3.6\n"
133+
"\n"
134+
" ID PROVIDER MODULE FUNCTION NAME\n"
135+
"29564 python18035 python3.6 _PyEval_EvalFrameDefault "
136+
"function-entry\n"
137+
"29565 python18035 python3.6 dtrace_function_entry "
138+
"function-entry\n"
139+
"29566 python18035 python3.6 _PyEval_EvalFrameDefault "
140+
"function-return\n"
141+
"29567 python18035 python3.6 dtrace_function_return "
142+
"function-return\n"
143+
"29568 python18035 python3.6 collect gc-"
144+
"done\n"
145+
"29569 python18035 python3.6 collect gc-"
146+
"start\n"
147+
"29570 python18035 python3.6 _PyEval_EvalFrameDefault line\n"
148+
"29571 python18035 python3.6 maybe_dtrace_line line"
149+
msgstr""
150+
117151
#:../../howto/instrumentation.rst:73
118152
msgid""
119153
"On Linux, you can verify if the SystemTap static markers are present in the "
@@ -122,6 +156,12 @@ msgstr ""
122156
"在 Linux 上,你可以透過查看二進位建置檔案中是否包含\".note.stapsdt\" 部分來"
123157
"驗證 SystemTap 靜態標記是否存在。"
124158

159+
#:../../howto/instrumentation.rst:78
160+
msgid""
161+
"$ readelf -S ./python | grep .note.stapsdt\n"
162+
"[30] .note.stapsdt NOTE 0000000000000000 00308d78"
163+
msgstr""
164+
125165
#:../../howto/instrumentation.rst:81
126166
msgid""
127167
"If you've built Python as a shared library (with the :option:`--enable-"
@@ -131,10 +171,64 @@ msgstr ""
131171
"如果你已將 Python 建置為共享函式庫(使用 :option:`--enable-shared` 配置選"
132172
"項),則需要在共享函式庫中查找。例如: ::"
133173

174+
#:../../howto/instrumentation.rst:85
175+
msgid""
176+
"$ readelf -S libpython3.3dm.so.1.0 | grep .note.stapsdt\n"
177+
"[29] .note.stapsdt NOTE 0000000000000000 00365b68"
178+
msgstr""
179+
134180
#:../../howto/instrumentation.rst:88
135181
msgid"Sufficiently modern readelf can print the metadata::"
136182
msgstr"足夠現代化的 readelf 可以印出元資料 (metadata): ::"
137183

184+
#:../../howto/instrumentation.rst:90
185+
msgid""
186+
"$ readelf -n ./python\n"
187+
"\n"
188+
"Displaying notes found at file offset 0x00000254 with length 0x00000020:\n"
189+
" Owner Data size Description\n"
190+
" GNU 0x00000010 NT_GNU_ABI_TAG (ABI version "
191+
"tag)\n"
192+
" OS: Linux, ABI: 2.6.32\n"
193+
"\n"
194+
"Displaying notes found at file offset 0x00000274 with length 0x00000024:\n"
195+
" Owner Data size Description\n"
196+
" GNU 0x00000014 NT_GNU_BUILD_ID (unique build "
197+
"ID bitstring)\n"
198+
" Build ID: df924a2b08a7e89f6e11251d4602022977af2670\n"
199+
"\n"
200+
"Displaying notes found at file offset 0x002d6c30 with length 0x00000144:\n"
201+
" Owner Data size Description\n"
202+
" stapsdt 0x00000031 NT_STAPSDT (SystemTap probe "
203+
"descriptors)\n"
204+
" Provider: python\n"
205+
" Name: gc__start\n"
206+
" Location: 0x00000000004371c3, Base: 0x0000000000630ce2, Semaphore: "
207+
"0x00000000008d6bf6\n"
208+
" Arguments: -4@%ebx\n"
209+
" stapsdt 0x00000030 NT_STAPSDT (SystemTap probe "
210+
"descriptors)\n"
211+
" Provider: python\n"
212+
" Name: gc__done\n"
213+
" Location: 0x00000000004374e1, Base: 0x0000000000630ce2, Semaphore: "
214+
"0x00000000008d6bf8\n"
215+
" Arguments: -8@%rax\n"
216+
" stapsdt 0x00000045 NT_STAPSDT (SystemTap probe "
217+
"descriptors)\n"
218+
" Provider: python\n"
219+
" Name: function__entry\n"
220+
" Location: 0x000000000053db6c, Base: 0x0000000000630ce2, Semaphore: "
221+
"0x00000000008d6be8\n"
222+
" Arguments: 8@%rbp 8@%r12 -4@%eax\n"
223+
" stapsdt 0x00000046 NT_STAPSDT (SystemTap probe "
224+
"descriptors)\n"
225+
" Provider: python\n"
226+
" Name: function__return\n"
227+
" Location: 0x000000000053dba8, Base: 0x0000000000630ce2, Semaphore: "
228+
"0x00000000008d6bea\n"
229+
" Arguments: 8@%rbp 8@%r12 -4@%eax"
230+
msgstr""
231+
138232
#:../../howto/instrumentation.rst:125
139233
msgid""
140234
"The above metadata contains information for SystemTap describing how it can "
@@ -158,14 +252,77 @@ msgstr ""
158252
"以下範例示範 DTrace 腳本可用於顯示 Python 腳本的呼叫/回傳階層結構,僅在名為 "
159253
"\"start\" 的函式的呼叫內進行追蹤。換句話說,引入時的函式呼叫不會被列出:"
160254

255+
#:../../howto/instrumentation.rst:138
256+
msgid""
257+
"self int indent;\n"
258+
"\n"
259+
"python$target:::function-entry\n"
260+
"/copyinstr(arg1) ==\"start\"/\n"
261+
"{\n"
262+
" self->trace = 1;\n"
263+
"}\n"
264+
"\n"
265+
"python$target:::function-entry\n"
266+
"/self->trace/\n"
267+
"{\n"
268+
" printf(\"%d\\t%*s:\", timestamp, 15, probename);\n"
269+
" printf(\"%*s\", self->indent,\"\");\n"
270+
" printf(\"%s:%s:%d\\n\", basename(copyinstr(arg0)), copyinstr(arg1), "
271+
"arg2);\n"
272+
" self->indent++;\n"
273+
"}\n"
274+
"\n"
275+
"python$target:::function-return\n"
276+
"/self->trace/\n"
277+
"{\n"
278+
" self->indent--;\n"
279+
" printf(\"%d\\t%*s:\", timestamp, 15, probename);\n"
280+
" printf(\"%*s\", self->indent,\"\");\n"
281+
" printf(\"%s:%s:%d\\n\", basename(copyinstr(arg0)), copyinstr(arg1), "
282+
"arg2);\n"
283+
"}\n"
284+
"\n"
285+
"python$target:::function-return\n"
286+
"/copyinstr(arg1) ==\"start\"/\n"
287+
"{\n"
288+
" self->trace = 0;\n"
289+
"}"
290+
msgstr""
291+
161292
#:../../howto/instrumentation.rst:172../../howto/instrumentation.rst:230
162293
msgid"It can be invoked like this::"
163294
msgstr"可以這樣呼叫: ::"
164295

296+
#:../../howto/instrumentation.rst:174
297+
msgid"$ sudo dtrace -q -s call_stack.d -c\"python3.6 script.py\""
298+
msgstr""
299+
165300
#:../../howto/instrumentation.rst:176../../howto/instrumentation.rst:236
166301
msgid"The output looks like this:"
167302
msgstr"輸出如下所示:"
168303

304+
#:../../howto/instrumentation.rst:178
305+
msgid""
306+
"156641360502280 function-entry:call_stack.py:start:23\n"
307+
"156641360518804 function-entry: call_stack.py:function_1:1\n"
308+
"156641360532797 function-entry: call_stack.py:function_3:9\n"
309+
"156641360546807 function-return: call_stack.py:function_3:10\n"
310+
"156641360563367 function-return: call_stack.py:function_1:2\n"
311+
"156641360578365 function-entry: call_stack.py:function_2:5\n"
312+
"156641360591757 function-entry: call_stack.py:function_1:1\n"
313+
"156641360605556 function-entry: call_stack.py:function_3:9\n"
314+
"156641360617482 function-return: call_stack.py:function_3:10\n"
315+
"156641360629814 function-return: call_stack.py:function_1:2\n"
316+
"156641360642285 function-return: call_stack.py:function_2:6\n"
317+
"156641360656770 function-entry: call_stack.py:function_3:9\n"
318+
"156641360669707 function-return: call_stack.py:function_3:10\n"
319+
"156641360687853 function-entry: call_stack.py:function_4:13\n"
320+
"156641360700719 function-return: call_stack.py:function_4:14\n"
321+
"156641360719640 function-entry: call_stack.py:function_5:18\n"
322+
"156641360732567 function-return: call_stack.py:function_5:21\n"
323+
"156641360747370 function-return:call_stack.py:start:28"
324+
msgstr""
325+
169326
#:../../howto/instrumentation.rst:201
170327
msgid"Static SystemTap markers"
171328
msgstr"靜態 SystemTap 標記"
@@ -185,6 +342,44 @@ msgid ""
185342
"hierarchy of a Python script:"
186343
msgstr"例如,此 SystemTap 腳本可用於顯示 Python 腳本的呼叫/回傳階層結構:"
187344

345+
#:../../howto/instrumentation.rst:210
346+
msgid""
347+
"probe process(\"python\").mark(\"function__entry\") {\n"
348+
" filename = user_string($arg1);\n"
349+
" funcname = user_string($arg2);\n"
350+
" lineno = $arg3;\n"
351+
"\n"
352+
" printf(\"%s => %s in %s:%d\\\\n\",\n"
353+
" thread_indent(1), funcname, filename, lineno);\n"
354+
"}\n"
355+
"\n"
356+
"probe process(\"python\").mark(\"function__return\") {\n"
357+
" filename = user_string($arg1);\n"
358+
" funcname = user_string($arg2);\n"
359+
" lineno = $arg3;\n"
360+
"\n"
361+
" printf(\"%s <= %s in %s:%d\\\\n\",\n"
362+
" thread_indent(-1), funcname, filename, lineno);\n"
363+
"}"
364+
msgstr""
365+
366+
#:../../howto/instrumentation.rst:232
367+
msgid""
368+
"$ stap\\\n"
369+
" show-call-hierarchy.stp\\\n"
370+
" -c\"./python test.py\""
371+
msgstr""
372+
373+
#:../../howto/instrumentation.rst:238
374+
msgid""
375+
"11408 python(8274): => __contains__ in Lib/_abcoll.py:362\n"
376+
"11414 python(8274): => __getitem__ in Lib/os.py:425\n"
377+
"11418 python(8274): => encode in Lib/os.py:490\n"
378+
"11424 python(8274): <= encode in Lib/os.py:493\n"
379+
"11428 python(8274): <= __getitem__ in Lib/os.py:426\n"
380+
"11433 python(8274): <= __contains__ in Lib/_abcoll.py:366"
381+
msgstr""
382+
188383
#:../../howto/instrumentation.rst:247
189384
msgid"where the columns are:"
190385
msgstr"其中的行 (column) 是:"
@@ -216,10 +411,20 @@ msgstr ""
216411
"函式庫中,並且探針的帶點路徑 (dotted path) 需要反映這一點。例如,上面範例中的"
217412
"這一列:"
218413

414+
#:../../howto/instrumentation.rst:259
415+
msgid"probe process(\"python\").mark(\"function__entry\") {"
416+
msgstr""
417+
219418
#:../../howto/instrumentation.rst:263
220419
msgid"should instead read:"
221420
msgstr"應該改為讀取:"
222421

422+
#:../../howto/instrumentation.rst:265
423+
msgid""
424+
"probe process(\"python\").library(\"libpython3.6dm.so.1.0\")."
425+
"mark(\"function__entry\") {"
426+
msgstr""
427+
223428
#:../../howto/instrumentation.rst:269
224429
msgid"(assuming a :ref:`debug build <debug-build>` of CPython 3.6)"
225430
msgstr"(假設 CPython 3.6 的\\ :ref:`除錯建置版本 <debug-build>`)"
@@ -342,6 +547,29 @@ msgstr ""
342547
msgid"Here is a tapset file, based on a non-shared build of CPython:"
343548
msgstr"這是一個 tapset 檔案,是基於 CPython 的非共享建置版本:"
344549

550+
#:../../howto/instrumentation.rst:351
551+
msgid""
552+
"/*\n"
553+
" Provide a higher-level wrapping around the function__entry and\n"
554+
" function__return markers:\n"
555+
"\\*/\n"
556+
"probe python.function.entry = process(\"python\").mark(\"function__entry\")\n"
557+
"{\n"
558+
" filename = user_string($arg1);\n"
559+
" funcname = user_string($arg2);\n"
560+
" lineno = $arg3;\n"
561+
" frameptr = $arg4\n"
562+
"}\n"
563+
"probe python.function.return = process(\"python\")."
564+
"mark(\"function__return\")\n"
565+
"{\n"
566+
" filename = user_string($arg1);\n"
567+
" funcname = user_string($arg2);\n"
568+
" lineno = $arg3;\n"
569+
" frameptr = $arg4\n"
570+
"}"
571+
msgstr""
572+
345573
#:../../howto/instrumentation.rst:372
346574
msgid""
347575
"If this file is installed in SystemTap's tapset directory (e.g. ``/usr/share/"
@@ -381,6 +609,21 @@ msgstr ""
381609
"此 SystemTap 腳本使用上面的 tapset 來更清晰地實作上面給出的追蹤 Python 函式呼"
382610
"叫階層結構的範例,而無需直接命名靜態標記:"
383611

612+
#:../../howto/instrumentation.rst:395
613+
msgid""
614+
"probe python.function.entry\n"
615+
"{\n"
616+
" printf(\"%s => %s in %s:%d\\n\",\n"
617+
" thread_indent(1), funcname, filename, lineno);\n"
618+
"}\n"
619+
"\n"
620+
"probe python.function.return\n"
621+
"{\n"
622+
" printf(\"%s <= %s in %s:%d\\n\",\n"
623+
" thread_indent(-1), funcname, filename, lineno);\n"
624+
"}"
625+
msgstr""
626+
384627
#:../../howto/instrumentation.rst:410
385628
msgid""
386629
"The following script uses the tapset above to provide a top-like view of all "
@@ -389,3 +632,25 @@ msgid ""
389632
msgstr""
390633
"以下腳本使用上面的 tapset 來提供所有正在運行之 CPython 程式碼的近乎最高層視"
391634
"角,顯示整個系統中每秒最常被進入的 20 個位元組碼幀 (bytecode frame):"
635+
636+
#:../../howto/instrumentation.rst:414
637+
msgid""
638+
"global fn_calls;\n"
639+
"\n"
640+
"probe python.function.entry\n"
641+
"{\n"
642+
" fn_calls[pid(), filename, funcname, lineno] += 1;\n"
643+
"}\n"
644+
"\n"
645+
"probe timer.ms(1000) {\n"
646+
" printf(\"\\033[2J\\033[1;1H\") /* clear screen\\*/\n"
647+
" printf(\"%6s %80s %6s %30s %6s\\n\",\n"
648+
"\"PID\",\"FILENAME\",\"LINE\",\"FUNCTION\",\"CALLS\")\n"
649+
" foreach ([pid, filename, funcname, lineno] in fn_calls- limit 20) {\n"
650+
" printf(\"%6d %80s %6d %30s %6d\\n\",\n"
651+
" pid, filename, lineno, funcname,\n"
652+
" fn_calls[pid, filename, funcname, lineno]);\n"
653+
" }\n"
654+
" delete fn_calls;\n"
655+
"}"
656+
msgstr""

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp