2010-11-27 6 views
8

디버깅이 끝날 때까지 내 소스 코드를 그대로 유지해야한다는 것에 지쳐 가고 있습니다. 코드를 변경할 때마다 GDB에서 불평하기 시작합니다.나중에 GDB 용 GCC를 사용하여 프로그램의 소스 코드를 바이너리에 임베드

경고 : 소스 파일이 실행 파일보다 최신입니다.

내가 다시 컴파일하기 전까지는 항상 그렇게 빨리 완료 될 수 없습니다. 바이너리에 프로그램의 소스 코드를 포함시키고 최신 버전 대신 GDB를 사용하게 만들 수 있다면 좋을 것 같습니다.

누구나 방법을 제안 할 수 있습니까? 이것이 전혀 구현 되었습니까?

답변

3

GCC는 오픈 소스입니다.이를 수정할 수 있습니다. 물론 정보를 올바르게 처리하려면 LD를 수정해야 할 것이며 임베디드 소스를 사용하려면 GDB를 수정해야합니다. 디버깅 정보에 대해 비표준 형식을 사용하므로 객체 파일을 조작하는 다른 도구를 수정해야 할 수 있습니다.

그래서 가능성이 있습니다. 그러나 전 세계의 모든 사람들이 디버깅을 마칠 때까지 소스를 유지하는 것이 더 쉽습니다. 일반적으로 실행 파일을 여러 번 다시 빌드하는 동안 단일 GDB 세션을 계속 실행시킬 수 있습니다 (필요한 경우). 그리고 일반적으로 어제 버전이 아닌 현재 버전의 코드를 디버그하는 것이 가장 쉽습니다. 어제의 버전을 디버깅해야하는 경우 어제의 코드를 사용할 수 있어야합니다 (좋은 VCS를 사용하고 있습니까?). 그래서 오늘의 수정 된 코드 대신 어제의 코드가 실제로 잘못되었음을 볼 수 있습니다. .

나는 당신에게 질문하는 것에 대한 크레딧을 줄 것이다. 아이디어를 생각해 내기 위해서는 몇 가지 측면 생각이 필요하다. 잘 했어! 그러나 실제로는 귀하의 제안은 명백히 구현하기가 쉽지 않습니다.

+0

확실히 새로운 기능으로 구현할 충분한 시간/기술/인내심/필요성이 없습니다. 그러나 아직 구현되지 않았기 때문에 상당히 놀랍습니다. 대부분의 경우 그것이 필요하지 않아야한다는 데 동의하지만, 때로는 약간의 사용이있을 수 있습니다. 예를 들어, 잘못된 것을 찾기 위해 오래된 바이너리로 디버거를 시작합니다. 문제의 원인을 찾았지만 코드의 절반을 작성하고 저장 한 직후 GDB 세션은 단순한 오타로 인해 충돌합니다. 이제 디버거를 사용하지 않고 코드를 수정하거나 롤백하거나, 프로그램을 재 작성하거나, GDB를 실행하고 변경 사항을 실행 취소해야합니다. – undercat

+0

@vovick : 최소한 두 가지 이유가 있습니다. 하나는 역사적입니다. 현재 사용할 수있는 풍부한 리소스를 항상 사용할 수있는 것은 아니 었습니다. 사람들은 디버깅 가능한 코드를 실제 소스로 혼란시키지 않는 것이 좋다고 생각했습니다. 너무 많은 디스크 공간과 메모리가 필요했기 때문입니다. 옛날에, 프로그램을 메모리에 집어 넣는 것만으로는 힘들었습니다. 추가 디버깅 정보를 추가하는 것만은 말할 것도 없었습니다. 다른 하나는 실용적입니다. 사람들은 퍼팅을 보증하기 위해 관련 소스를 사용하기가 너무 어려워하지 않습니다. 당신이 제안한대로하기위한 노력. –

관련 문제