2011-10-10 76 views
1

我有具有以下功能實現一個foo.c的源文件:設置使用gdb斷點時相同的源文件被多次使用

#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來調試這個函數時,我的問題就出現了,我需要在這個函數的特定行中設置一個斷點。 如果我做的:

b foo.c:235 

和235的功能是實現內部的線路,其中功能GDB要實際設置斷點? prefix1_function_name或prefix2_function_name?

有沒有辦法讓gdb設置兩個斷點?

謝謝!

+1

在我看來,你應該在這裏重新考慮你的方法。你爲什麼要爲同一個函數使用兩個不同的名字?這似乎是一種使代碼不必要地混淆而難以維護的方法。無論如何,我相信它會在兩者中,但我不知道。您似乎可以通過設置斷點,雙向調用函數以及使用回溯來驗證呼叫路徑來相當快地測試它。 – dbeer

回答

3

爲什麼不試試呢?當我試了一下,在設置一個破發點都文件:

(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. 

如果你想僅在特定文件打破,只需要使用全路徑名的文件來消除歧義。