我有一个190 MB的C++二进制文件。当我将此二进制文件放入dbx并尝试创建断点时,dbx挂起。挂起dbx时,我观察到它的内存 swift 增长到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。
总检视:8.2.0-0
操作系统:Solaris 10

我如何使用Dbx:

dbx mybinary
stop at Something.cc:170

Dbx从不从此命令返回,我最终必须从单独的终端中杀死Dbx。

我尝试了几件事但没有成功:
1.切换为动态链接大多数库,从而将二进制大小减小到19 MB。
2.在Solaris x86上试用。
3.将软件编译为64位。

有谁知道会导致这种情况发生的原因以及如何解决此问题?

最佳答案

尝试使用其他调试器进行调试,以确定您的代码是否引起了问题。我在Solaris上最喜欢的调试器是mdb:

mdb ./yourapplicationname
> your_c_fn_name::bp
> ::run

如果您使用C++进行编码,请记住使用错误的函数名。您将nm输出通过管道传递到grep,以查找错误的函数名称是什么:
nm ./yourapplicationname | grep yourc++fnname

如果mdb与dbx有相同的问题,那么我建议您看一下代码。但是,如果mdb毫无问题地进入bp,那么您可以使用mdb(据我所知不能使用源文件),也可以继续调整应用程序以使dbx满意。

09-04 13:53