GDB祕技--除錯時執行程式碼中的特定函式
阿新 • • 發佈:2019-02-09
在使用GDB除錯程式時,有時遇到看到資料不知所云,必須對照定義才能看懂, 有時還要做些運算才能看出來,這樣效率顯然不高. 如果需要檢視一個變數類的當前值,簡單的資料型別還好說,如果遇到一些列舉型的變數或特殊條件,想要看到清晰的資料輸出,就會比較繁瑣. 好在GDB提供了一個除錯時執行某個函式的功能:call, 在需要時能幫你解決大問題.
舉個簡單的例子,如果有一個類定義了一個dump方法, 在呼叫時或者在類的內部,都可以在你想要看看資料時,使用call執行一下:
a. dump函式程式碼:
b. GDB停在呼叫位置:void myTestingClass::dump() { std::cout<<"=== dump info about the class ==="<<std::endl; std::cout<<"my name is "<<m_name<<std::endl; std::cout<<"Age:"<<m_age<<std::endl; }
c. 在GDB控制檯輸入call指令,執行例項的dump方法:
如果執行到類的方法中,可以執行this->xxx來呼叫方法:
這是一個簡單的示例. 除了輸出資訊外,還可以做一些動態插入代的功能. 活學活用,這個call指令絕對的牛氣! 最新的XCode預設的Debugger是LLDB, 可以通過p object->method()或po [object method]的方式來完成。
參考:
轉載請註明出處:http://blog.csdn.net/horkychen