2011-10-27 2 views
12

pdb를 실행하고 코드를 단계별로 실행하고 어떤 시점에서 일부 이름이 가리키는 값을 변경합니다. 그래서 저는 'stationLat'이라는 이름으로 가리키는 값을 변경하고 싶을 것입니다. 그러나 나는 할 수없는 것처럼 보인다. 여기에 그 예가 있습니다 :pdb로 파이썬을 디버깅하는 동안 어떻게 값을 변경합니까?

>>> import extractPercentiles 
>>> import pdb 
>>> pdb.run("extractPercentiles.extractOneStation()") 
> <string>(1)<module>()->None 
(Pdb) s 
--Call-- 
> /scratch/extractPercentiles.py(96)extractOneStation() 
-> def extractOneStation() : 
(Pdb) tbreak 132 
Breakpoint 3 at /scratch/extractPercentiles.py:132 
(Pdb) c 

Deleted breakpoint 3 
> /scratch/extractPercentiles.py(132)extractOneStation() 
-> stationLon = float(stationLoc[3]) 

그래서 지금 나는 stationlat의 가치를 바꾸고 싶습니다. PDB는 나에게 새로운 값으로 stationLat을 설정할 수 있도록 나타납니다,하지만 난 값을 검사 할 때, 변경은 :

(Pdb) stationLat 
-34.171100000000003 
(Pdb) stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) !stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) 

당신은 내가 사용하려고 볼 수 있습니다! 성공없이. 디버거 파이썬 문 것으로 간주됩니다 인식하지 않고 디버깅중인 프로그램의 컨텍스트에서 실행되는

명령 있음 :

PDB의 매뉴얼은 내가 변수를 변경 할 수 있어야했다. 파이썬 문장의 앞에는 느낌표 (!)를 붙일 수 있습니다. 디버깅중인 프로그램을 검사하는 강력한 방법입니다. 이 함수

이 범위의 문제인가를 변수을 변경하거나 호출도 가능하다? 내가 pdb를 시작한 방법과 관련이 있습니까? 임베디드 "pdb.set_trace"관용구를 시도하고 같은 결과를 얻었습니다.

읽어 주셔서 감사합니다.

답변

9

이것은 bug in Python 2.6 인 것으로 보입니다. 파이썬 2.7에서이 작업을 수행 할 수 있어야합니다.

+0

아 :

이보십시오! 알았어 고마워. 이름을 다듬거나 특별한 네임 스페이스를 사용해야한다고 생각했습니다. 나는 프레임 스택도 위아래로 가려고했다. –

+1

아,이 프로젝트에 대해 파이썬 2.5.2에서 다시 작업해야한다는 것을 기록 할 것입니다. 여전히 버그가 있습니다. –

+0

또한 할당 할 수없는 특정 변수가 있습니다. "a"또는 "b"와 같은 것 – dtc

0

실제로 pdb에 새 값을 할당하면 변수 값이 변경됩니다. 그러나 코드를 실행하지 않고 pdb의 변수를 다시 읽으려고하면 원래 값으로 재설정 될 수 있습니다.

코드로 다시 들어가면 새 값 (-40)을 사용해야합니다.

stationLat = -40 
s # step back into code 
stationLat # should display -40 
관련 문제