gdb可以查询执行文件的宏, 但是查询不了o文件的宏

在gcc使用-g3编译的时候, gdb可以查看对应c语言的宏.

gdb a.out -ex 'list main' -ex 'info macro XXXX' -ex 'q'
Defined at /xvdc/w.c:6    #define XXXX ppppppppppppp

但是o文件却看不了对应的宏,

gdb w.o -ex 'list main' -ex 'info macro XXXX' -ex 'q'
The symbol `XXXX' has no definition as a C/C++ preprocessor
<user-defined>:-1

网上找了半天也没发现什么有用的地方, 只能自己看gdb的源代码调

一路调试了半天, 找到了个关键地方
函数dwarf_decode_macros里面解析macinfo_type的时候, a.out和w.o有所区别

      switch (macinfo_type)
        {
          /* A zero macinfo type indicates the end of the macro
             information.  */
        case 0:
      break;

    case DW_MACRO_define:
    case DW_MACRO_undef:
    case DW_MACRO_start_file:
    case DW_MACRO_end_file:

a.out文件的macinfo_type序列是DW_MACRO_import DW_MACRO_start_file
o文件的macinfo_type序列是5个DW_MACRO_define_strp

而在gdb内部产生macro表格的路径是由DW_MACRO_start_file开始的

    case DW_MACRO_start_file:
      {
        unsigned int bytes_read;
        int line, file;

        line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
        mac_ptr += bytes_read;
        file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
        mac_ptr += bytes_read;

        current_file = macro_start_file (file, line, current_file, lh);
      }

下一步要做的就是看看如何让gcc在生产o文件的时候, section .debug_macro里面带上DW_MACRO_start_file

看遍gcc选项也没发现什么, 难道又要去看gcc源代码了, 这种突如其来的领域问题真是难搞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值