2013-03-07 80 views
1

我想知道它到底會打破,什麼將這個事件發生前,後執行 兩種情況:線路和功能當我在GDB中設置一箇中斷點時,對於C++文件,它究竟在哪裏破壞?

線路情況:

(gdb) break test.c:851 

代碼:

850 setup(); 
851 return configure(); 
852 

這會執行configure()嗎?或不

功能的情況下:

(gdb) TestClass::initialize() 

代碼:

849 initialize(){ 
850 setup(); 
851 return configure(); 
852 

它會執行設置()?

+0

調試器會在斷點中指定的代碼的第一個機器指令之前停止程序。 – 2013-03-07 15:20:37

回答

2

通常斷點停止之前源代碼行的第一條指令時編譯調試。但是,在代碼優化時,內聯和指令重排可能導致unintuitive results。可以肯定的是,在彙編指令中設置斷點。

通常它不會執行您的行或函數的第一行。但你應該意識到,在某些情況下,情況可能並非如此。請注意,gdb依賴於提供給它的信息,因此結果可能因語言/編譯器而異。

3

根據我的經驗,一旦前一行代碼完成,gdb就會中斷。您可以通過從斷點開始進行驗證,您將觀察到配置函數中的代碼將被執行,並且該值將返回到第851行,此時return關鍵字將跳入並返回該值。

+0

這是爲了正確的功能嗎? – Iancovici 2013-03-07 15:29:18

+0

行情,並不能確切地說明功能情況 – 2013-03-07 15:36:33

相關問題