如何调试输出指向成员的指针?

时间:2017-07-14 09:01:45

标签: c++ c++11 name-mangling

出于调试目的,我想打印模板参数的值。

对于类型模板参数,我可以使用typeid(T).name(),它会(或多或少)将类型T的名称作为字符串。

有没有办法为指针到成员模板参数获取类似的字符串(例如" &Parent::member")?我不能在这里使用typeid,因为指针不是类型。

调试字符串应包含成员的名称以及父级的类型名称。

1 个答案:

答案 0 :(得分:1)

默认情况下,变量/成员名称不会写入编译对象文件。所以这些信息在编译过程中丢失了,你无法得到它。唯一的例外是如果使用调试信息进行编译,但即使是这种情况,执行时也不会使用exe加载调试信息。

我看到两种可能的解决方案:

  1. 使用其他模板参数,该参数是指向成员的指针的名称。必须手动指定此名称(也许您可以为此创建宏)
  2. 如果您在可执行文件中有调试信息,则可以尝试获取此信息。此解决方案依赖于编译器,可能需要hacky技术。对于gcc / clang,调试信息通常采用DWARF格式,并记录在案。对于MSVC,有Debug Interface Access SDKthis。麻烦的解决方案,也许不值得麻烦。