2013-03-07 79 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

相关问题