大型可执行文件导致调试器挂起

4
我有一个 C++ 二进制文件,大小为 190 MB。当我将此二进制文件放入 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位。

是否有人知道是什么原因导致这种情况发生,并如何解决这个问题?


编译器的哪个版本和dbx的哪个版本?dbx -V CC -V 只是为了确认:dbx挂起并开始响应您键入“stop”命令,因此您甚至不必在调试器中运行程序? - Chris Quenelle
我通过澄清我的原始帖子来回答了你的问题。 - Hitman
一个值得尝试的好方法是下载最新版本的Solaris Studio并尝试使用。http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.html您正在使用的版本已经有4.5年的历史了。 - Chris Quenelle
我们喜欢处于昨日技术的前沿。我打算试试Solaris Studio 12.3。对我来说,获取更新版本的过程实际上非常漫长而费力,所以在我能够发布结果之前可能还需要一些时间。 - Hitman
经常情况下,那些停留在旧版本的人也拥有支持合同。如果您拥有最新的支持合同,您应该能够下载您正在使用的Sun Studio版本(Sun Studio 12)的最新补丁。 - Chris Quenelle
我下载了一个新版本的DBX,它是与Solaris Studio 12.3(7.9 2011/11/16)捆绑在一起的。这个版本运行得更好。 - Hitman
1个回答

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满意。

感谢@Mustafa。尝试了mdb,断点起作用了。Mdb比使用打印进行调试更高级;然而,我和我的团队会发现与源文件一起工作的调试器更有价值。因此,如果您有关于如何让dbx或TotalView工作的任何信息,我将不胜感激。 - Hitman
我认为Sun Studio 12中没有dbxtool可用。此外,它是一个使用dbx引擎作为底层的GUI层。因此,在dbxtool下可能会发生相同的错误。 - Chris Quenelle
Dbxtool没有安装在我的系统上。@Chris,我认为你说得对,它只是dbx的GUI包装器。 - Hitman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接