2016-09-08 5 views
1

Я уверен, что здесь что-то не хватает, но я нахожу это очень странным.Python pdb вычисляет значение 774, но программа назначает 836

В pdb я получаю к следующему шагу ...

Importing data... 
> /usr/local/lib/python2.7/dist-packages/tensorflow/tensorflow/scroll/marching_cube.py(111)read_data() 
-> n_cubes = int((n_slices - n_input_z) * int(math.ceil((x_dimension - n_input_x)/step_size)) * int(math.ceil((y_dimension - n_input_y)/step_size))) 

Когда я вычислить правую часть задания, я получаю 774 - что правильное значение. Я могу доказать это, выполнив вычисления непосредственно в pdb ...

(Pdb) int((n_slices - n_input_z) * int(math.ceil((x_dimension - n_input_x)/step_size)) * int(math.ceil((y_dimension - n_input_y)/step_size))) 
774 

Но смотреть на это ... когда я иду к следующей строке с помощью команды n, n_cubes вдруг присваивает значение 836 ...

> /usr/local/lib/python2.7/dist-packages/tensorflow/tensorflow/scroll/marching_cube.py(111)read_data() 
-> n_cubes = int((n_slices - n_input_z) * int(math.ceil((x_dimension - n_input_x)/step_size)) * int(math.ceil((y_dimension - n_input_y)/step_size))) 
(Pdb) int((n_slices - n_input_z) * int(math.ceil((x_dimension - n_input_x)/step_size)) * int(math.ceil((y_dimension - n_input_y)/step_size))) 
774 
(Pdb) n 
> /usr/local/lib/python2.7/dist-packages/tensorflow/tensorflow/scroll/marching_cube.py(112)read_data() 
-> input_4d_volume = np.empty((n_cubes,n_input_z,n_input_x,n_input_y)) 
(Pdb) n_cubes 
836 

Для доказательства вычисления должна быть 774 я напечатаю все переменные, участвующие в вычислении ...

(Pdb) n_slices 
49 
(Pdb) n_input_z 
48 
(Pdb) x_dimension 
396 
(Pdb) n_input_x 
48 
(Pdb) step_size 
8 
(Pdb) y_dimension 
198 
(Pdb) n_input_y 
48 
+0

Какое значение 'n_cubes' перед выполнением' line 111 '? –

+0

@CraigBurgler не определен, если я устанавливаю его равным нулю раньше, получаю те же результаты –

+1

вы используете потоки: http://stackoverflow.com/questions/5644521/python-variable-is-evaluated-differently-in- pdb-and-print-statements, http://stackoverflow.com/questions/11821565/python-pdb-debugger-gets-confused-when-python-method-called-after-a-tree-but-ope?s= 7 | 0.5485 –

ответ

0

установки точки останова в начале функции попытаться быть запущен как нить, или в пределах его while true: цикла, если он есть, путем добавления этого:

import pdb 
pdb.set_trace() 

Затем запустить скрипт нормально (не через pdb), и выполнение начнет работать с отладчиком при запуске потока. Таким образом, установка точки останова позволяет выполнить pdb в дочернем потоке, где он будет иметь доступ к значению n_cubes's.

+0

Это на самом деле то, как я отлаживал. В любом месте, где я хочу изучить код, я устанавливаю 'pdb.set_trace()'. Я что-то упускаю? –

 Смежные вопросы

  • Нет связанных вопросов^_^