2010-03-17 3 views
1

부착 된 GBD로 실행하는 동안 실행하면 응용 프로그램의 실행을 중단해야하지만 GDB가 실행되고 있지 않으면 계속 실행해야하는 디버깅 코드가 있습니다.gdb가 연결되어 있으면 어떻게 중단 할 수 있습니까?

try 
{ 
    if(some_complex_expression) 
    { 
    gdb_should_break_here(); 
    do_some_stuff(); 
    throw MyException(); 
    } 
} 
catch(const MyException & e) 
{ 
    handle_exception_and_continue(); 
} 

무엇을 할 수 gdb_should_break_here해야합니다

내가 함께 일하고 있어요 코드 구조에서이 같이 보입니다?

답변

2

사실 내가 깰 수있는 모든 곳에서 빈 gdb_should_break_here() 함수가 작동하는지 확인하는 것처럼 보입니다. (코드를 최적화하지 않는 한).

그럼 내가 할 필요는

break gdb_should_break_here 

이며, GDB는 모든 권리 장소에서 중지됩니다.

내 코드가 제대로 구성되지 않았고 일부 디버깅 매크로에 포함되어 있기 때문에 간과 한 것 같습니다.

+0

예, 아마도 가장 쉬운 방법 일 것입니다. 어떤 시점에서 로깅 코드를 넣는 것이 유용 할 수도 있습니다. 또한 코드를 최적화하더라도 gdb_should_break_here의 구현이 별도의 파일에 있고 최종 응용 프로그램에 별도로 링크하면 빈 (GDB)에도 불구하고 GDB가 중단 될 수 있습니다 . –

+0

아쉽게도 그 기능은 헤더 전용 라이브러리의 일부입니다. 내가보고있는 코드는 본질적으로 오류 로깅 및 처리 코드의 일부로 아마 더 많은 로깅이 적절하지 않을 수 있습니다. 드문 에지 사례를 디버깅하는 데 정말로 필요합니다. 특히 스택 추적이 필요한 경우 특히 그렇습니다. –

관련 문제