首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何标记C源文件中的位置以供以后的断点定义使用?

如何标记C源文件中的位置以供以后的断点定义使用?
EN

Stack Overflow用户
提问于 2021-11-24 01:28:15
回答 4查看 151关注 0票数 6

问题:我希望能够在C代码中放置不同的可能唯一的或重复的“标记”,这样我就可以在gdb中使用它们来创建断点。

类似工作:

  • 行号的断点:与源行上断点的主要区别是,如果对标记之前的代码进行修改,使其产生或多或少的行,则对标记的引用在语义上仍将是正确的,而对源行的引用则不会。
  • 标签:我来自于我之前的问题如何告诉gcc保留我未使用的标签?,在这个问题中,我先入为主地认为答案是插入标签。在与平台中知识渊博的成员讨论时,我被告知,标签的名称在编译后不会保存。编译器将删除C中未使用的标签。
  • 注入asm标签:与前面的方法相关,如果我在C源代码中注入asm代码,会出现某些问题,原因是内联函数、编译器优化和缺乏作用域。这使得这种方法不健全。
  • 定义了一个虚拟函数:,关于另一个问题,在C文件中设置GDB断点,有一种有趣的方法,其中一个“虚拟”函数可以放在代码中,然后在函数调用中添加一个断点。这种方法的问题是,必须为每个不同的标记复制此类函数的定义。

是否有更好的解决办法来实现这一点?还是换个角度来解决这个问题?

EN

回答 4

Stack Overflow用户

发布于 2021-11-24 17:04:37

使用SDT (静态定义跟踪)探测点似乎可以满足所有需求。

GDB 文档链接到如何定义探测的示例。

示例使用(gdb) break -probe-stap my_probe (这应该记录在GDB断点部分中,但目前没有)。

票数 3
EN

Stack Overflow用户

发布于 2021-11-24 01:43:02

您可以创建一个虚拟变量并将其设置为不同的值。然后可以使用条件监视点。示例:

代码语言:javascript
运行
复制
#include <stdio.h>
static volatile int loc;
int main()
{
    loc = 1;
    puts("hello world");
    loc = 2;
    return 0;
}
代码语言:javascript
运行
复制
(gdb) watch loc if loc == 2
Hardware watchpoint 1: loc
(gdb) r
Starting program: /tmp/a.out 
hello world

Hardware watchpoint 1: loc

Old value = 1
New value = 2
main () at test.c:8
8       return 0;

当然,您可以将赋值包装在宏中,以便只在调试生成中获得赋值。常用的注意事项:优化和内联可能会受到影响。

票数 2
EN

Stack Overflow用户

发布于 2021-11-25 12:03:25

使用python在源文件中搜索一些预定义的标签,并在那里使用设置断点

代码语言:javascript
运行
复制
def break_on_labels(source, label):
    """add breakpoint on each SOURCE line containing LABEL"""
    with open(source) as file:
        l = 0
        for line in file:
            l = l + 1
            if label in line:
                gdb.Breakpoint(source=source, line=l)

main_file = gdb.lookup_global_symbol("main").symtab.fullname()
break_on_labels(main_file, "BREAK-HERE")

示例:

代码语言:javascript
运行
复制
int main(void)
{
  int a = 15;
  a = a + 23; // BREAK-HERE
  return a;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70089766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档