我想用Django應用程序使用GDB的反向調試。我得到它在GDB中運行,但我不能讓它倒退。是否可以使用GDB對Python進行反向調試?怎麼樣?
我用Ctrl-Z停止了我的Django應用程序,然後在gdb提示符下輸入reverse-next
,得到錯誤消息「目標多線程不支持此命令。」
我做錯了嗎?這不可能嗎?都?
我想用Django應用程序使用GDB的反向調試。我得到它在GDB中運行,但我不能讓它倒退。是否可以使用GDB對Python進行反向調試?怎麼樣?
我用Ctrl-Z停止了我的Django應用程序,然後在gdb提示符下輸入reverse-next
,得到錯誤消息「目標多線程不支持此命令。」
我做錯了嗎?這不可能嗎?都?
之前,你可以使用GDB的反向調試,你必須告訴它來記錄你的程序的執行(因此它可以回放)通過target record
命令,如記錄here。
我不知道這會幫助你,儘管調試Django應用程序 - GDB是非常適合調試「原生」的代碼(編譯C/C++
),並且是不適合用來做調試「解釋」的代碼(任正向或反向)。
這是一個非常好的問題。
我的第一個衝動是確保我使用IPython作爲我的django的shell,並且看看在這種情況下是否支持pdb。 Pdb應該有一個非常類似gdb的接口。我記得,gdb是用來調試C/C++程序的,而Django則是由python解釋器執行的。使用PDB是在這裏:
http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/
你也可能要使用Django的擴展,用於訪問WERKZEUG調試視圖嘗試。
RevDB
https://bitbucket.org/pypy/revdb
https://morepypy.blogspot.co.uk/2016/07/reverse-debugging-for-python.html
該項目旨在讓pdb
般的逆轉調試,這很可能是你想要的,除非你正在調試的Python解釋器本身。
它仍處於2017年初期階段,您必須從源代碼構建。
如何質疑並沒有提及GDB:Is it possible to step backwards in pdb?
最後,GDB調試逆轉是相當不成熟的,例如不處理AVX擴展Disable AVX-optimized functions in glibc (LD_HWCAP_MASK, /etc/ld.so.nohwcap) for valgrind & gdb record,所以我強烈建議使用rr
代替:https://github.com/mozilla/rr(RevDB聲稱從中獲得靈感)。
gdb最近獲得了在源代碼級別調試Python程序的能力。至少,Fedora發佈的gdb可以做到這一點。我沒有對自己進行測試,因爲我傾向於不喜歡調試器。這與gdb如何知道STL字符串或向量的外觀是相似的,所以它可以很好地將它打印出來。它知道你已經連接到一個Python解釋器,除了調試解釋器外,它還可以調試解釋器正在運行的程序。 – Omnifarious 2010-09-27 11:51:13