2012-03-12 4 views
17

gdb를 사용하여 프로그램을 디버깅하고 있습니다. 처음에는 내 load 실행 파일을 실행 한 다음 프로그램을 실행하려면 continue입니다. 때로는 프로그램 실행을 중단하고 싶기 때문에 Ctrl + C을 수행합니다.gdb : gdb를 종료하지 않고 종료하는 프로그램

제 문제는 이걸 닫으면 입니다. 내 프로그램과 gdb가 모두입니다. gdb를 종료하지 않고 프로그램을 종료하려면 어떻게해야합니까?

+4

그런 일은 일어나지 않아야합니다. Ctrl-C는 프로그램을 인터럽트 ** (종료하지 않음)하기로되어 있으며 gdb를 종료하지 않아도됩니다. 어떤 환경을 사용하고 있습니까? – trojanfoe

+1

Cygwin을 사용하고 있습니다. 기묘한. – Randomblue

답변

4

Windows 에서처럼 보이지만, Ctrl-Break이 아닌 Ctrl-C을 사용해야합니다. 이 page을 참조하십시오.

발췌 :

C-C를 입력하여 중단 할 수없는`Ctrl-C를 '키 스트로크 (keystroke)의 특별한 의미를 전환 할 SetConsoleMode를 호출 MS-Windows 프로그램

. MS-Windows의 gdb는 대체 인터럽트 키 시퀀스로 C-를 지원합니다.이 시퀀스는 C-c를 무시하더라도 디버거를 인터럽트하는 데 사용할 수 있습니다.

+1

감사합니다. 이것은 여전히 ​​GDB를 종료합니다. 이제 종료 될 때 "Quit (core dumped)"라고 쓰여집니다. – Randomblue

+0

@Randomblue Oh blimey - 매우 행복해 보이지 않습니다. Microsoft 컴파일러로 전환하는 것 이외에 무엇을 제안해야할지 모르겠다. (Windows SDK는 무료 다.) – trojanfoe

+0

@Randomblue 당신은'cmd' 또는'sh' 콘솔에서 물건을 실행합니까? 디버깅 된 프로그램 Cygwin 또는 Win32가 기본입니까? (레코드 :'gdb' Cygwin 또는 Win32?))) –

2

우선 (gdb 내부가 아닌) 프로그램을 실행 한 다음 해당 PID를 찾으십시오.

다른 쉘에서는 gdb --pid=<your program's pid>을 실행하십시오. gdb를 실행중인 프로그램에 연결합니다. 프로그램의 실행을 중지하므로 계속하려면 c을 실행하십시오.

이제 프로그램을 종료하면 gdb 세션이 그대로 유지됩니다.

+0

내 프로그램이 원격 호스트에서 실행 중입니다. (ARM 칩) – Randomblue

17

gdb 내부에서 kill을 사용해 보셨습니까?

+0

예. 하지만'continue' 후에 나는 gdb 명령 프롬프트를 실행하지 않으므로 아무 일도 일어나지 않습니다. – Randomblue

+0

어떻게 @trojanfoe가 말했습니다. Ctrl-C는 프로그램을 중단시켜 gdb 콘솔을 다시 사용할 수있게합니다. 그러나'start'를 사용하여 프로그램을 시작하십시오. 실행은'main' 함수의 시작 부분에서 중단되어야합니다. 그런 다음 kill을 사용하여 프로그램을 종료하십시오. – Saphrosit

+0

'start'를 시도 할 때 "No symbol table loaded."라는 "file"명령을 사용하십시오. " – Randomblue

12

응용 프로그램을 중단하려면 ctrl-c를 사용하십시오. 그런 다음 GDB 프롬프트에서 "signal SIGINT"를 실행하면 응용 프로그램에이 신호가 전송되어 명령 행에서 ctrl-c를 수행 할 때 일반적으로 수행했던 것과 동일한 작업을 수행하게됩니다.

관련 문제