当我在GDB中设置一个断点时,对于c ++文件,它究竟在哪里破坏?

时间:2013-03-07 15:04:33

标签: c++ debugging gdb

我想知道它究竟会在哪里打破,以及它会在此事件之前和之后执行什么 2例:线和功能

行案例:

(gdb) break test.c:851

代码:

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

这会执行configure()吗? <或者

功能案例:

(gdb) TestClass::initialize()

代码:

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

它会执行setup()吗?

2 个答案:

答案 0 :(得分:3)

根据我的经验,一旦前一行的代码完成,gdb就会中断。您可以通过从断点处步进来验证这一点,您将观察到configure函数中的代码将被执行,并且值将返回到第851行,此时return关键字将启动并返回该值。

答案 1 :(得分:2)

通常,断点在之前停止编译为调试时所在源代码行的第一条指令。但是,在优化代码时,内联和指令重新排列可能会导致unintuitive results。可以肯定的是,在汇编指令上设置断点。

通常它不会执行您的行或函数的第一行。但是你应该知道,在某些情况下可能并非如此。请注意,gdb依赖于提供给它的信息,因此结果可能因语言/编译器而异。