如何让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
相关产品推荐
相关产品推荐

