Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在多次使用同一源文件时使用gdb设置断点_C_Macros_Gdb - Fatal编程技术网

C 在多次使用同一源文件时使用gdb设置断点

C 在多次使用同一源文件时使用gdb设置断点,c,macros,gdb,C,Macros,Gdb,我有一个foo.c源文件,它具有以下函数实现: #include "header.h" void PREFIX(function_name)(){ ... } 我将把这个文件复制到两个目录中(dir1和dir2)。在dir1中,我有header.h,如下所示: #define PREFIX(a) prefix1_ ## a 在dir2中,我有header.h,比如: #define PREFIX(a) prefix2_ ## a 因此,在链接过程中,我将有两个不同的函数名 当我想使用

我有一个foo.c源文件,它具有以下函数实现:

#include "header.h"
void PREFIX(function_name)(){
   ...
}
我将把这个文件复制到两个目录中(dir1和dir2)。在dir1中,我有header.h,如下所示:

#define PREFIX(a) prefix1_ ## a
在dir2中,我有header.h,比如:

#define PREFIX(a) prefix2_ ## a
因此,在链接过程中,我将有两个不同的函数名

当我想使用gdb调试这个函数,并且需要在这个函数的特定行中设置断点时,我的问题就出现了。 如果我这样做:

235是函数实现中的一行,gdb将在哪个函数中实际设置断点?prefix1_函数名称还是prefix2_函数名称

有没有办法让gdb在两个节点上都设置断点


谢谢

为什么不试试呢?当我尝试时,它在两个文件中都设置了断点:


如果您只想打断一个特定的文件,只需使用该文件的完整路径名来消除歧义。

在我看来,您应该在这里重新考虑您的方法。为什么同一个函数需要两个不同的名称?这似乎是一种使代码变得不必要的混乱和难以维护的方法。无论如何,我相信两者都会有,但我不知道。通过设置断点、双向调用函数以及使用回溯来验证调用路径,似乎可以相当快地对其进行测试。
b foo.c:235
(gdb) break a.c:5
Breakpoint 1 at 0x100000e87: file 3/a.c, line 5.
Breakpoint 2 at 0x100000e75: file 2/a.c, line 5.
warning: Multiple breakpoints were set.
Use the "delete" command to delete unwanted breakpoints.