问题:我希望能够在C代码中放置不同的可能唯一的或重复的“标记”,这样我就可以在gdb中使用它们来创建断点。
类似工作:
是否有更好的解决办法来实现这一点?还是换个角度来解决这个问题?
发布于 2021-11-24 17:04:37
发布于 2021-11-24 01:43:02
您可以创建一个虚拟变量并将其设置为不同的值。然后可以使用条件监视点。示例:
#include <stdio.h>
static volatile int loc;
int main()
{
    loc = 1;
    puts("hello world");
    loc = 2;
    return 0;
}(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;当然,您可以将赋值包装在宏中,以便只在调试生成中获得赋值。常用的注意事项:优化和内联可能会受到影响。
发布于 2021-11-25 12:03:25
使用python在源文件中搜索一些预定义的标签,并在那里使用设置断点:
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")示例:
int main(void)
{
  int a = 15;
  a = a + 23; // BREAK-HERE
  return a;
}https://stackoverflow.com/questions/70089766
复制相似问题