[英]How to set a breakpoint on a python function in gdb
我有時使用gdb來調試python腳本(當然是CPython)。 通常調試核心轉儲(以及涉及c擴展模塊時)非常有用。
一個基本問題是如何在gdb中的python函數上設置斷點。 假設我有一個帶有foo函數的python腳本,我想在調用foo后立即斷開。 我想在PyEval_EvalFrameEx
上設置一個條件斷點可能會有效,但不知道該怎么做。
使用你建議的技術,這是有效的(雖然它不漂亮):
break PyEval_EvalFrameEx if (strcmp((((PyStringObject *)(f->f_code->co_name))->ob_sval), "foo") == 0)
這里,f是PyFrameObject。 您可能還想檢查f->f_code->co_filename
以確保您擁有正確的文件。 請注意,這確實會使程序變慢,因為您正在打破並進行大量比較。
GDB 7有一些很好的幫助宏來處理CPython,但我不熟悉它們。 可能有更好的方法來實現你正在尋找的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.