GDB没有打破在C++中创建对象时设置的断点

Dre*_*rew 2 c++ gdb

我有一个c ++应用程序,使用以下main.cpp:

1:  #include <stdio.h>
2:  #include "HeatMap.h"
3:  #include <iostream>
4:
5:  int main (int argc, char * const argv[])
6:  {
7:    HeatMap heatMap();
8:    printf("message");
9:    return 0;
10: }
Run Code Online (Sandbox Code Playgroud)

一切都编译没有错误,我正在使用gdb(GNU gdb 6.3.50-20050815(Apple版本gdb-1346)(2009年9月18日星期五20:40:51)),并使用gcc编译应用程序(gcc版本4.2. 1(Apple Inc. build 5646)(点1)),命令为"-c -g".

当我向第7,8和9行添加断点并运行gdb时,我得到以下内容......

(gdb) break main.cpp:7
Breakpoint 1 at 0x10000177f: file src/main.cpp, line 8.
(gdb) break main.cpp:8
Note: breakpoint 1 also set at pc 0x10000177f.
Breakpoint 2 at 0x10000177f: file src/main.cpp, line 8.
(gdb) break main.cpp:9
Breakpoint 3 at 0x100001790: file src/main.cpp, line 9.
(gdb) run
Starting program: /DevProjects/DataManager/build/DataManager 
Reading symbols for shared libraries ++. done

Breakpoint 1, main (argc=1, argv=0x7fff5fbff960) at src/main.cpp:8
8       printf("message");
(gdb) 
Run Code Online (Sandbox Code Playgroud)

那么,为什么,为什么有人知道为什么我的应用程序不会破坏对象创建的断点,但确实打破了printf线?

Drew J. Sonne.

编辑:答案 - GDB跳过我的代码!

Whi*_*ind 5

您需要将HeatMap实例化为:

HeatMap heatMap;
Run Code Online (Sandbox Code Playgroud)

HeatMap heatMap(); 声明一个返回HeatMap的函数.

  • @Drew - 你绝对不是傻瓜.您已经遇到了C++语法的奇怪之处,这种语法被称为"最令人烦恼的解析". (2认同)