是否有可能讓gdb將某些東西記錄到終端而不是破壞它?例如,我想在某些方法上設置一個「斷點」,並在每次調用該方法時使gdb自我打印以及參數。基本上我想在沒有實際重新編譯的情況下將打印語句插入任意位置。gdb:記錄的東西,而不是打破?
感謝您的任何建議
這是我後至今,這些有益的意見有:
define logFoo
b fooMethod
commands
po self
end
end
GDB似乎並不喜歡嵌套結束語句雖然。有什麼想法嗎?
是否有可能讓gdb將某些東西記錄到終端而不是破壞它?例如,我想在某些方法上設置一個「斷點」,並在每次調用該方法時使gdb自我打印以及參數。基本上我想在沒有實際重新編譯的情況下將打印語句插入任意位置。gdb:記錄的東西,而不是打破?
感謝您的任何建議
這是我後至今,這些有益的意見有:
define logFoo
b fooMethod
commands
po self
end
end
GDB似乎並不喜歡嵌套結束語句雖然。有什麼想法嗎?
您可以使用Breakpoint Command Lists。有一個例子是如何做到的。
例如,這裏是你如何可以使用 斷點命令在進入打印x的值 爲foo每當x是 陽性。
break foo if x>0 commands silent printf "x is %d\n",x cont end
真棒。有一件事。我想打破的符號(方法)是一件很常見的事情,所以它可能需要設置許多斷點。如何將命令附加到每個命令而無需手動執行100次? – 2011-06-01 19:49:57
不,這是不可能的。您只能勾選代碼和機器碼的符號。如果你想記錄輸出,你需要一個記錄功能。
如果您正在跟蹤特定錯誤,請嘗試使用條件斷點和監視變量。
編輯:
即使沒有直接洛也可能是使用GDB command files
感謝您的回覆。我很難相信這是不可能的。我可以很容易地做一些事情,比如break hitTest:withEvent:,然後當它破解爲自我時,p指向我想要的信息。這怎麼能不自動讓gdb直接打印這些,而不讓我在每次斷裂時都實際告訴它呢? – 2011-06-01 19:22:31
這聽起來很瘋狂,可能有機會使用某種宏執行你想要的操作,但它仍然不能直接記錄。結帳:http://tromey.com/blog/?p=548 – grundprinzip 2011-06-01 19:29:47
爲了將來的參考,雙重目的是一個已知的錯誤。解決方法是將內部塊放在單獨的文本文件中並使用源來加載它。 – 2011-06-01 23:49:39