2014-04-18 10 views
0

나는이 이상한 행동을 얻을 :GDB는 라인 번호에 명확하게 브레이크 포인트를 설정할 때 여러 개의 브레이크 포인트를 설정합니다. 잘못된 디버그 기호? 중단 점을 설정할 때

내가 원하는 실제 라인, 즉입니다 어느 것도 6 개 라인, 될 일이
GNU gdb (GDB) 7.6.2 (Debian 7.6.2-1) 
... Blah blah legal stuff 
Reading symbols from /home/matt/Programming/Latium/latium/src/test_latium...done. 
(gdb) break base58.h:144 
Breakpoint 1 at 0x43597f: base58.h:144. (6 locations) 
(gdb) info breakpoints 
Num  Type   Disp Enb Address   What 
1  breakpoint  keep y <MULTIPLE>   
1.1       y  0x000000000043597f in CBase58Data::SetString(char const*) at base58.h:144 
1.2       y  0x0000000000452fcf in CBitcoinAddress::CBitcoinAddress(char const*) at /home/matt/Programming/Latium/latium/src/base58.h:144 
1.3       y  0x000000000045324f in CBitcoinSecret::SetString(char const*) at /home/matt/Programming/Latium/latium/src/base58.h:144 
1.4       y  0x00000000004db613 in DecodeAddress(std::string, CService&) at base58.h:144 
1.5       y  0x0000000000573d1a in CBitcoinAddress::CBitcoinAddress(std::string const&) at base58.h:144 
1.6       y  0x00000000005bea68 in ReadKeyValue(CWallet*, CDataStream&, CDataStream&, int&, std::vector<uint256, std::allocator<uint256> >&, bool&, bool&, std::string&, std::string&) at base58.h:144 

. base58.h의 144 행. 이 문제의 원인은 무엇이며 어떻게 문제를 파악하고 해결할 수 있습니까?

저는 GNU Make 3.81입니다. 차이가 있다면 -j8을 사용하고 있습니다. gcc는 데비안 4.8.2-16입니다.

다른 파일에 중단 점을 설정하려고 시도했으며 다른 헤더 파일을 포함하여 작동하는 것처럼 보입니다. 나도 makefile을 청소하려고 노력했다. .. No 행운. 내가 ccache를 지우려고했는데 ... 행운이 없다.

+1

여러 소스 파일에 포함 된 결과로 컴파일 된 코드의 여러 위치에서 중단 될 가능성이 높습니다. –

+1

템플릿에 중단 점을 설정하려는 경우 GDB는 템플릿이 인스턴스화되는 모든 위치에 중단 점을 만들어야합니다. 인라인 함수의 경우 이와 비슷한 작업을 수행해야합니다. – IronMensan

+0

시도했기 때문에 인라인 함수는 다른 파일에서는 문제가되지 않습니다. 또한 메서드에서 중단 점을 설정하려고 시도했지만 실패했습니다. 따라서이 예제의 중단 점이 인라인 함수에 있지만 문제는 아닙니다. 이것은 템플릿이 아닙니다. –

답변

1

내가 생각하기에 지금은 바보 같지만, 다시 보면 makefile에 컴파일러 플래그에 -02가 포함되어 있습니다. 분명히 최적화를 사용하면 디버그 기호가 쓸모 없게되므로 디버그 빌드에 최적화를 사용하지 마십시오.

+0

나는 강력하게 동의하지 않습니다. 요즘에 디버깅하는 모든 것은 완벽하게 최적화되어 있습니다 (코드의 특성으로 인해). 어셈블리 레벨로 디버깅하기 만하면 디버그 심볼에있는 라인 번호를 고려해 * 아마도 * 특정 어셈블리 명령어를 유발 한 것에 대한 힌트를 얻을 수 있습니다. –

+0

그것은 쓸모가 없지만 더 어려워집니다. –