<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 調試你的 Cython 程序 > 原文: [http://docs.cython.org/en/latest/src/userguide/debugging.html](http://docs.cython.org/en/latest/src/userguide/debugging.html) Cython 附帶了 GNU Debugger 的擴展,可以幫助用戶調試 Cython 代碼。要使用此功能,您需要安裝 gdb 7.2 或更高版本,使用 Python 支持(鏈接到 Python 2.6 或更高版本)構建。調試器支持 2.6 及更高版本的調試對象。對于 Python 3,代碼應該使用 Python 3 構建,調試器應該使用 Python 2 運行(或者至少它應該能夠找到 Python 2 Cython 安裝)。請注意,在最新版本的 Ubuntu 中,安裝`apt-get`的`gdb`配置了 Python 3.在這樣的系統上,可以通過下載`gdb`源然后運行來獲得`gdb`的正確配置。 : ```py ./configure --with-python=python2 make sudo make install ``` 調試器將需要 Cython 編譯器可以導出的調試信息。這可以通過將`gdb_debug=True`傳遞給`cythonize()`在設置腳本中實現: ```py from distutils.core import setup from distutils.extension import Extension extensions = [Extension('source', ['source.pyx'])] setup(..., ext_modules=cythonize(extensions, gdb_debug=True)) ``` 對于開發,將`--inplace`標志傳遞給`setup.py`腳本通常很有幫助,這使得 distutils“就地”構建項目,即不在單獨的&lt;cite&gt;構建&lt;/cite&gt;目錄中。 直接從命令行調用 Cython 時,可以使用`--gdb`標志寫入調試信息: ```py cython --gdb myfile.pyx ``` ## 運行調試器 要運行 Cython 調試器并讓它導入 Cython 導出的調試信息,請在構建目錄中運行`cygdb`: ```py $ python setup.py build_ext --inplace $ cygdb GNU gdb (GDB) 7.2 ... (gdb) ``` 使用 Cython 調試器時,最好使用使用調試符號編譯的解釋器構建和運行代碼(即使用`--with-pydebug`配置或使用`-g` CFLAG 編譯)。如果您的包由管理器管理器安裝和管理,則可能需要單獨安裝調試支持。如果使用 NumPy,那么你還需要安裝 numpy 調試,否則你會看到多播的[導入錯誤。例如。對于 ubuntu:](https://bugzilla.redhat.com/show_bug.cgi?id=1030830) ```py $ sudo apt-get install python-dbg python-numpy-dbg $ python-dbg setup.py build_ext --inplace ``` 然后你還需要用`python-dbg`運行你的腳本。確保在使用調試符號構建包時,如果先前已編譯了 cython 擴展,則重新編譯它們。如果您的軟件包受版本控制,您可能需要在構建之前執行`git clean -fxd`或`hg purge --all`。 您還可以將其他參數傳遞給 gdb: ```py $ cygdb /path/to/build/directory/ GDBARGS ``` 即: ```py $ cygdb . -- --args python-dbg mainscript.py ``` 要告訴 cygdb 不要導入任何調試信息,請提供`--`作為第一個參數: ```py $ cygdb -- ``` ## 使用調試器 Cython 調試器附帶了一組支持斷點,堆棧檢查,源代碼列表,步進,單步執行等命令。大多數這些命令與它們各自的 gdb 命令類似。 `cy break breakpoints...` 打破 Python,Cython 或 C 函數。首先,它將查找具有該名稱的 Cython 函數,如果 cygdb 不知道具有該名稱的函數(或方法),它將設置(待定)C 斷點。 `-p`選項可用于指定 Python 斷點。 可以為函數或方法名設置斷點,也可以完全“限定”斷點,這意味著給出函數的整個“路徑”: ```py (gdb) cy break cython_function_or_method (gdb) cy break packagename.cython_module.cython_function (gdb) cy break packagename.cython_module.ClassName.cython_method (gdb) cy break c_function ``` 您還可以打破 Cython 行號: ```py (gdb) cy break :14 (gdb) cy break cython_module:14 (gdb) cy break packagename.cython_module:14 ``` Python 斷點當前支持模塊的名稱(不是整個包路徑)和函數或方法: ```py (gdb) cy break -p python_module.python_function_or_method (gdb) cy break -p python_function_or_method ``` 注意 Python 斷點僅適用于 Python 構建,其中可以從調試器中讀取 Python 幀信息。要確保這一點,請使用 Python 調試版本或使用調試支持編譯的非剝離版本。 `cy step` 逐步完成 Python,Cython 或 C 代碼。直接從 Cython 代碼調用的 Python,Cython 和 C 函數被認為是相關的,并將被引入。 `cy next` 跨越 Python,Cython 或 C 代碼。 `cy run` 運行程序。默認解釋器是用于構建擴展的解釋器,或者在“不導入調試信息”選項生效的情況下運行解釋器`cygdb`。可以使用 gdb 的`file`命令覆蓋解釋器。 `cy cont` 繼續該計劃。 `cy up` `cy down` 在堆棧中上下移動到被認為是相關的框架。 `cy finish` 執行直到滿足向上相關的幀或停止執行。 `cy bt` `cy backtrace` 打印所有相關的框架的回溯。 `-a`選項使其打印完整的回溯(所有 C 幀)。 `cy select` 按`cy backtrace`列出的編號選擇堆棧幀。引入此命令是因為`cy backtrace`打印反向堆棧跟蹤,因此幀編號與 gdb 的`bt`不同。 `cy print varname` 打印本地或全局 Cython,Python 或 C 變量(取決于上下文)。變量也可能被取消引用: ```py (gdb) cy print x x = 1 (gdb) cy print *x *x = (PyObject) { _ob_next = 0x93efd8, _ob_prev = 0x93ef88, ob_refcnt = 65, ob_type = 0x83a3e0 } ``` `cy set cython_variable = value` 將 Cython 堆棧上的 Cython 變量設置為 value。 `cy list` 列出當前行周圍的源代碼。 `cy locals` `cy globals` 打印所有本地和全局變量及其值。 `cy import FILE...` 從作為參數提供的文件中導入調試信息。導入調試信息的最簡單方法是使用 cygdb 命令行工具。 `cy exec code` 在當前的 Python 或 Cython 框架中執行代碼。這就像 Python 的交互式解釋器一樣。 對于 Python 幀,它使用 Python 框架中的全局變量和局部變量,對于 Cython 幀,它使用 Cython 模塊上使用的全局變量的 dict 和一個填充了本地 Cython 變量的新 dict。 Note `cy exec`修改狀態并在調試對象中執行代碼,因此可能存在危險。 例: ```py (gdb) cy exec x + 1 2 (gdb) cy exec import sys; print sys.version_info (2, 6, 5, 'final', 0) (gdb) cy exec >global foo > >foo = 'something' >end ``` ## 便利功能 以下函數是 gdb 函數,這意味著它們可以在 gdb 表達式中使用。 `cy_cname`(_varname_) 返回 Cython 變量的 C 變量名。對于全局變量,這可能實際上不是有效的。 `cy_cvalue`(_varname_) 返回 Cython 變量的值。 `cy_eval`(_expression_) 在最近的 Python 或 Cython 框架中評估 Python 代碼,并將表達式的結果作為 gdb 值返回。如果成功則提供新引用,出錯時為 NULL。 `cy_lineno`() 返回所選 Cython 幀中的當前行號。 Example: ```py (gdb) print $cy_cname("x") $1 = "__pyx_v_x" (gdb) watch $cy_cvalue("x") Hardware watchpoint 13: $cy_cvalue("x") (gdb) cy set my_cython_variable = $cy_eval("{'spam': 'ham'}") (gdb) print $cy_lineno() $2 = 12 ``` ## 配置調試器 調試器的一些方面可以使用 gdb 參數進行配置。例如,可以禁用顏色,可以配置終端背景顏色和斷點自動完成。 `cy_complete_unqualified` 告訴 Cython 調試器`cy break`是否還應該完成普通函數名稱,即不以其模塊名稱為前綴。例如。如果你有一個名為`spam`的函數,在模塊`M`中,它會告訴你是僅完成`M.spam`還是只完成`spam`。 默認值為 true。 `cy_colorize_code` 告訴調試器是否著色源代碼。默認值為 true。 `cy_terminal_background_color` 告訴調試器有關終端背景顏色的信息,這會影響源代碼著色。默認值為“dark”,另一個有效選項為“light”。 這是這些參數的使用方式: ```py (gdb) set cy_complete_unqualified off (gdb) set cy_terminal_background_color light (gdb) show cy_colorize_code ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看