You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GCC保留未使用的标签以用于GDB断点设置?

编辑

感谢@NateEldredge,我已经将问题的定义整理得更加清晰。

我会使用标签在GDB中设置断点,这样无论我在标签前后增加或删减代码行,断点的位置都始终准确。

如果我在编译选项中添加-Wno-error=unused-label,编译器不会抛出错误,但标签会从生成的汇编代码中消失。
如果我在代码中使用__attribute__((unused))标记标签,结果完全相同:没有编译报错,但标签仍然会被编译器移除。

请问有没有非hack的正规方法可以实现这一需求?

以下是我的测试示例代码:

int main(void){
    int a = 15;
 label: __attribute__((unused))
    a = a + 23;
    return a;
}

编译后得到的汇编代码如下:

main:
        push    ebp
        mov     ebp, esp
        sub     esp, 16
        mov     DWORD PTR [ebp-4], 15
        add     DWORD PTR [ebp-4], 23
        mov     eax, DWORD PTR [ebp-4]
        leave
        ret

该示例有对应的交互式测试版本可使用。

我使用的GCC版本信息如下:

$ gcc --version
gcc (GCC) 10.3.1 20210422 (Red Hat 10.3.1-1)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

内容的提问来源于stack exchange,提问作者onlycparra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:15:04