Посмотрите на этот пример Plnkr
Переменная this
сильно отличается timesCalled
с каждым нажатием кнопки увеличивается только на 1. Ответ на мой личный вопрос:
.click( () => { } )
и
.click(function() { })
создают одинаковое количество функции при использовании в цикле, как вы можете видеть из подсчета Guid в Plnkr.
Да, gdb хорош для более низкой отладки уровня.
можно изменить потоки с поток команда.
, например,
(gdb) thr 2
[Switching to thread 2 (process 6159 thread 0x3f1b)]
(gdb) backtrace
....
Вы могли также проверить Python определенные отладчики как Winpdb, или pydb. Оба независимые от платформы.
Используйте Winpdb. Это независимо от платформы графический отладчик Python GPL с поддержкой удаленной отладки по сети, несколько потоков, модификация пространства имен, встроили отладку, зашифрованную коммуникацию и до 20 раз быстрее, чем pdb.
Функции:
(источник: winpdb.org )
Можно присоединить отладчик к многопоточному процессу Python, но необходимо сделать это на уровне C. Для понимания, что продолжается Вам нужен интерпретатор Python, который будет скомпилирован с символами. Если Вы не имеете один, необходимо загрузить источник с python.org и создать его сами:
./configure --prefix=/usr/local/pydbg
make OPT=-g
sudo make install
sudo ln -s /usr/local/pydbg/bin/python /usr/local/bin/dbgpy
Удостоверяются, что Ваша рабочая нагрузка работает на той версии интерпретатора. Можно затем присоединить к нему с GDB в любое время. Люди Python включали образец ".gdbinit" в их каталог Misc, который имеет некоторые полезные макросы. Однако это повреждается для многопоточной отладки (!). Необходимо заменить строки как это
while $pc < Py_Main || $pc > Py_GetArgcArgv
со следующим:
while ($pc < Py_Main || $pc > Py_GetArgcArgv) && ($pc < t_bootstrap || $pc > thread_PyThread_start_new_thread)
Иначе команды как pystack
не завершатся на потоках кроме основного потока. С этим материалом на месте, можно сделать материал как [1 110]
gdb> attach <PID>
gdb> info threads
gdb> thread <N>
gdb> bt
gdb> pystack
gdb> detach
и видеть то, что продолжается. Отчасти.
можно проанализировать то, что объекты с "pyo" макросом. у Chris есть некоторые примеры на его блоге.
Удача.
(Публичное выражение благодарности для блог даН для некоторой ключевой информации для меня, особенно поточная обработка фиксирует!)
Если Вы имеете в виду pydb, нет никакого способа сделать это. В том направлении было некоторое усилие: видят фиксацию svn , но от нее отказались. Предположительно winpdb поддерживает его .
Мой опыт, отлаживая многопоточные программы в PyDev (Eclipse на Windows XP), созданный поток start_new_thread использования потоков не мог быть сцеплен, но поток, созданный с помощью поточной обработки. Поток мог быть сцеплен. Надеюсь, что информация полезна.
На какой платформе Вы делаете попытку этого? Большинство отладчиков позволяет Вам присоединять к рабочему процессу при помощи идентификатора процесса. Можно или произвести идентификатор процесса через вход или использование чего-то как Диспетчер задач. Как только это достигается, будет возможно осмотреть отдельные потоки и их стеки вызовов.
РЕДАКТИРОВАНИЕ: у Меня нет опыта с Отладчиком GNU (GDB), который является кросс-платформенным, однако я нашел этот ссылка , и это может запустить Вас на правильном пути. Это объясняет, как добавить отладочные символы (удобный для чтения отслеживаний стека) и как дать gdb команду присоединять к рабочему процессу Python.
Это может использоваться в качестве очень простого "удаленного" отладчика:
import sys
import socket
import pdb
def remote_trace():
server = socket.socket()
server.bind(('0.0.0.0', 12345))
server.listen()
client, _= server.accept()
stream = client.makefile('rw')
sys.stdin = sys.stdout = sys.stderr = stream
pdb.set_trace()
remote_trace()
# Execute in the shell: `telnet 127.0.0.1 12345`
В Windows легче использовать Netcat вместо Telnet (который будет также работать над Linux).