簡體   English   中英

如何在gdb中的python函數上設置斷點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM