gpt4 book ai didi

c++ - 我可以使用使用调试符号重新编译的相同二进制文件来调试由没有调试符号的 C++ 二进制文件生成的内核吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:04 48 4
gpt4 key购买 nike

我正在尝试调试由没有调试符号的 C++ 二进制文件生成的核心文件。为了进行有效的调试,我需要调试符号,所以我使用 -g 选项重新编译了相同的代码,以便在重新编译的二进制文件中生成调试符号。我现在可以使用第二个二进制文件(有调试符号,其他一切都一样)调试由第一个二进制文件(没有调试符号)生成的同一个核心文件吗?

非常感谢!

最佳答案

如果您使用例如编译原始可执行文件g++ -O2 ...,您不能(正如您可能已经发现的那样)使用通过 g++ -g ... 构建的新可执行文件来调试 核心 -- GDB 需要符号匹配,但它们不会(由于优化级别不同)。

可以做的是使用与原始优化相同的优化来构建新的可执行文件,但带有调试符号:g++ -O2 -g .. ..

构建新的可执行文件后,运行 nm old.a.out > old.nmnm new.a.out > new.nm 并进行比较输出。它们应该相同或非常接近。

如果是,您应该能够使用 new.a.out 调试由 old.a.out 生成的 core

将来,您应该始终使用调试符号构建您的可执行文件,然后保留完整拷贝,但发送一个没有调试信息的拷贝:

cp a.out a.out.debug
strip --strip-debug a.out
# a.out is now good to send to customers
# keep a.out.debug for future debugging

关于c++ - 我可以使用使用调试符号重新编译的相同二进制文件来调试由没有调试符号的 C++ 二进制文件生成的内核吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3790403/

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