我有一个190 MB大小的C ++二进制文件。当我将这个二进制文件放入dbx并尝试创建断点时,dbx会挂起。当dbx挂起时,我发现它的内存很快就会增长到10 GB以上。 TotalView允许我设置断点;但是,它显示的所有数据都是虚假的。我已成功调试了许多其他较小的二进制文件,所以我的预感是这个二进制文件的大尺寸是问题所在。
二进制:ELF 32位MSB可执行文件SPARC32PLUS版本1,V8 +必需,动态链接,不剥离。
编译:CC:Sun C ++ 5.9 SunOS_sparc 2007/05/03
Dbx:7.6 SunOS_sparc 2007/05/03
TotalView:8.2.0-0
操作系统:Solaris 10
我如何使用Dbx:
dbx mybinary
stop at Something.cc:170
Dbx永远不会从这个命令返回,我最终必须从一个单独的终端杀死Dbx。
我尝试了一些没有成功的事情:
1.动态切换到大多数库中的链接,这将二进制大小减小到19 MB
2.试用Solaris x86
3.将软件编译为64位。
有谁知道会导致这种情况发生的原因以及如何解决问题?
答案 0 :(得分:2)
尝试使用其他调试程序进行调试,以确定代码是否导致问题。我在Solaris上最喜欢的调试器是mdb:
mdb ./yourapplicationname
> your_c_fn_name::bp
> ::run
如果您使用C ++进行编码,请记住使用损坏的函数名称。您将nm输出传输到grep以找出您的错位函数名称是什么:
nm ./yourapplicationname | grep yourc++fnname
如果mdb与dbx有同样的问题,那么我建议您查看一下代码。但是,如果mdb在没有问题的情况下访问bp,那么你可以使用mdb(据我所知,它不能使用源文件),或者你可以继续调整你的应用程序以使dbx满意。