gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:34 26 4
gpt4 key购买 nike

我有一个大小为 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。
总 View :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 满意。

关于c++ - 大型可执行文件导致调试器挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com