C ++ Eclipse调试器:“找不到当前函数的边界”并且不会在断点处停止

时间:2009-02-20 21:04:36

标签: c++ eclipse debugging

我第一次使用Ubuntu,eclipse的调试器给我带来的麻烦比我可以处理的更多。目前我只是想弄清楚如何让“无法找到当前函数的界限”停止,这样我就可以看到我的控制流程出错了。

我知道这是一个模糊的问题,但我愿意快速提供必要的任何信息。我一直在谷歌搜索大约2个小时的信息,并打开和关闭不同的东西无济于事。

我正在使用版本:3.4.1(我相信最新版本)

此外,即使我在构建之前设置它们,我的断点也不总是有效(可能大约25%的成功率)。我的cout<<或者printf也无法在程序爆炸前打印。这让我觉得它是一种超出调试器的并发进程,但我不知道如何解决这个问题。

我非常感谢任何帮助。我会在附近。

1 个答案:

答案 0 :(得分:4)

不是unheard-of problem

我想您可以确认:

  • 所有共享库都是用-g标志(debug)编译的?
  • 并且输出应用程序二进制文件似乎没问题,因为它在命令行中正确运行?
  • 你没有编译一些framwework(比如Qt4),它会require qmake to be run生成你添加“CONFIG += qt debug”的项目文件?
  • 你在构建过程中没有任何警告? (如此"Clock skew detected"消息)

所有这一切的重点是:

在某个地方,其中一个库或您自己的程序中没有“调试”信息。

-g标志可以直接在makefile中设置(在这种情况下并不特别依赖于OS)。

示例( 不针对Linux

CXX = g++
CXXFLAGS =  -O2 -Wno-deprecated -g
DEFINES = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DLITTLE_ENDIAN

##########################

COMPILE=$(CXX) $(CXXFLAGS) $(DEFINES)
LINK=$(CXX)

UNRAR_OBJ=filestr.o recvol.o rs.o scantree.o

OBJECTS=rar.o strlist.o strfn.o pathfn.o

.cpp.o:
    $(COMPILE) -D$(WHAT) -c -g $<

all:    unrar

clean:
    @rm -f *.o *.bak *~

unrar:    WHAT=UNRAR
unrar:    $(OBJECTS) $(UNRAR_OBJ)
    @rm -f makeunrar
    $(LINK) -Wl,-s -g -o unrar $(LDFLAGS) $(OBJECTS)
$(UNRAR_OBJ) $(LIBS)   

sfx:    WHAT=SFX_MODULE
sfx:    $(OBJECTS)
    @rm -f default.sfx
    $(LINK) -Wl,-s -g -o default.sfx $(LDFLAGS)
$(OBJECTS) -DSFX_MODULE

g++ -O2 -Wno-deprecated -g  -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE -DLITTLE_ENDIAN -DUNRAR -c -g
rar.cpp
[...]
g++ -Wl,-s -g -o unrar  rar.o strlist.o ...

这里,makefile包含一个巨大的陷阱:

g++ -Wl,-s -o unrar  rar.o strlist.o ...

-s代表“strip”,意味着之前生成的所有调试信息都会在最终输出中丢失。所以请检查您的链接选项。