【发布时间】:2015-06-04 21:13:33
【问题描述】:
我在使用我们软件的两个发行版本时遇到问题。我有两个可执行文件(MS 和 Linux),分别使用 MSVC 和 GCC 编译库。
上下文:
我的程序包含一个 message_queue.hpp 模板类,它继承自 message_queue_inter.h 接口。此接口包含来自静态库的包含。 这两个库都经过 O2 优化,没有任何调试信息(调试信息格式 -> MSVC 为无,GCC 为 -g0)。
事实是,当我调试两个可执行文件(在 Eclipse 中)时,GDB 可以在我的派生类和我的 MSVC 可执行文件中的基类(接口)中找到成员的符号(我可以在 Eclipse 中扩展变量内容调试视图)
相反,使用 GNU/Linux 库的版本无法找到仅在界面中的成员的符号。 如果我尝试从我的界面访问成员,GDB 会为它返回“No Data Fields”。派生 (.hpp) 类的所有成员都正确显示。
为什么 MSCV 和 GCC 编译器之间存在如此大的差异? 当然,我注意到 MSVC 库比 GCC 库大得多。 感谢“nm”工具,我可以注意到接口符号在我的 MSVC 库中找到,但在 GNU/Linux 库中没有。
我知道发布版本不应该包含任何调试信息,但我想知道为什么我可以使用 MSVC 而不是 GCC 访问这个变量。 (我需要构建一个g2最低的GCC调试版本来生成更多的符号,以便显示消息队列的内容)。
我迷路了!
感谢您的帮助。
【问题讨论】:
标签: c++ visual-c++ gdb eclipse-cdt debug-symbols