스택큐힙리스트

실행 중인 Python 애플리케이션에서 스택 추적 보여주기 본문

카테고리 없음

실행 중인 Python 애플리케이션에서 스택 추적 보여주기

스택큐힙리스트 2023. 4. 16. 10:03
반응형

이 Python 애플리케이션은 때때로 멈추는 현상이 있어 그 원인을 찾을 수 없습니다.

Python 인터프리터에 정확히 실행되고 있는 코드를 보여줄 방법이 있나요?

실시간 스택 추적이 필요한가요?

관련 질문:

Print current call stack from a method in Python code

Check what a running process is doing: print stack trace of an uninstrumented Python program

답변 1

이와 같은 상황에 사용하는 모듈이 있습니다. 프로세스가 오랜 시간 동안 실행되지만 때로는 알 수없는 무작위한 이유로 정지됩니다. 이것은 조금 꼼수스러우며 Unix에서만 작동합니다 (신호가 필요함).

import code, traceback, signal

def debug(sig, frame):

Interrupt running process, and provide a python prompt for

interactive debugging.

d={'_frame':frame} # Allow access to frame object.

d.update(frame.f_globals) # Unless shadowed by global

d.update(frame.f_locals)

i = code.InteractiveConsole(d)

message = Signal received : entering python shell.\nTraceback:\n

message += ''.join(traceback.format_stack(frame))

i.interact(message)

def listen():

signal.signal(signal.SIGUSR1, debug) # Register handler

사용하려면 프로그램이 시작될 때 어딘가에서 listen() 함수를 호출하면 됩니다(모든 파이썬 프로그램에 사용하려면 site.py에 넣을 수도 있습니다). 그리고 실행을 대기하면 됩니다. 언제든지 kill을 사용하거나 파이썬에서 SIGUSR1 신호를 보내면 프로세스에 신호를 보내세요.

os.kill(pid, signal.SIGUSR1)

이것은 프로그램이 현재 위치에서 파이썬 콘솔로 실행을 중단하고 스택 추적을 보여주며 변수를 조작할 수 있게합니다. 실행을 계속하려면 제어-d(EOF)를 사용하십시오(그러나 신호를 보내는 지점에서 아마도 I/O 등을 중단할 가능성이 있으므로 완전히 비 침해적이지는 않습니다).

동일한 작업을 수행하지만 실행 중인 프로세스와 파이프를 통해 통신하여 (백그라운드 프로세스 디버깅을 허용하기 위해) 더 큰 스크립트가 있습니다. 여기에 게시하기에는 조금 큽니다. 그러나 python cookbook recipe 로 추가했습니다.

답변 2

Python 어플리케이션에서 스택 트레이스 보여주기

파이썬은 간단하지만 매우 강력한 언어로, 다양한 프로그래밍 분야에서 사용됩니다. 하지만 때로는 실행 중인 어플리케이션에서 문제가 발생할 수 있습니다. 이런 경우, 스택 트레이스를 통해 문제를 해결할 수 있습니다.

스택 트레이스란, 코드의 실행 경로를 역추적하여 문제가 발생한 위치를 찾는 도구입니다. 파이썬 어플리케이션에서 스택 트레이스를 보여주기 위해서는 다음과 같은 단계를 따라야 합니다.

1. 어플리케이션 실행

먼저, 어플리케이션을 실행합니다. 이때, 문제가 발생했다면 어플리케이션이 중단될 것입니다.

2. Traceback 모듈 호출

어플리케이션이 중단된 후, Traceback 모듈을 호출하여 스택 트레이스를 얻습니다. Traceback 모듈은 파이썬에서 예외 처리를 위해 사용되는 모듈입니다.

3. 스택 트레이스를 출력

스택 트레이스를 얻은 후에는, 이를 출력하여 문제가 발생한 위치를 찾습니다. 스택 트레이스는 일반적으로 호출 스택 정보를 포함하고 있습니다. 호출 스택 정보란, 코드의 실행 경로를 역추적하여 어떤 함수나 메서드가 호출되었는지를 알려줍니다.

스택 트레이스를 출력할 때는, 보통 다음과 같은 정보를 포함합니다.

- Traceback 모듈의 출력

- 에러 메시지

- 호출 스택 정보

스택 트레이스를 출력하여 어플리케이션에서 발생한 문제를 해결하는 것은 매우 중요합니다. 이를 통해 문제의 원인을 파악하고, 이를 수정하여 어플리케이션의 안정성을 높힐 수 있습니다. 따라서 파이썬 어플리케이션에서 스택 트레이스를 활용하는 것이 좋습니다.

반응형
Comments