1. 程式人生 > >GDB祕技--除錯時執行程式碼中的特定函式

GDB祕技--除錯時執行程式碼中的特定函式

        在使用GDB除錯程式時,有時遇到看到資料不知所云,必須對照定義才能看懂, 有時還要做些運算才能看出來,這樣效率顯然不高. 如果需要檢視一個變數類的當前值,簡單的資料型別還好說,如果遇到一些列舉型的變數或特殊條件,想要看到清晰的資料輸出,就會比較繁瑣. 好在GDB提供了一個除錯時執行某個函式的功能:call, 在需要時能幫你解決大問題.

        舉個簡單的例子,如果有一個類定義了一個dump方法, 在呼叫時或者在類的內部,都可以在你想要看看資料時,使用call執行一下:

a. dump函式程式碼:

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;
}
b. GDB停在呼叫位置:

   

c. 在GDB控制檯輸入call指令,執行例項的dump方法:

    

如果執行到類的方法中,可以執行this->xxx來呼叫方法:

  

這是一個簡單的示例. 除了輸出資訊外,還可以做一些動態插入代的功能. 活學活用,這個call指令絕對的牛氣! 最新的XCode預設的Debugger是LLDB, 可以通過p object->method()或po [object method]的方式來完成。

參考: 

轉載請註明出處:http://blog.csdn.net/horkychen