diff --git a/python/helpers/pydev/pydevd.py b/python/helpers/pydev/pydevd.py index 032e117597de..6c3b58f824e6 100644 --- a/python/helpers/pydev/pydevd.py +++ b/python/helpers/pydev/pydevd.py @@ -556,14 +556,17 @@ class PyDB: self._lock_running_thread_ids.acquire() try: for t in all_threads: - thread_id = GetThreadId(t) - if getattr(t, 'is_pydev_daemon_thread', False): pass # I.e.: skip the DummyThreads created from pydev daemon threads elif isinstance(t, PyDBDaemonThread): pydev_log.error_once('Error in debugger: Found PyDBDaemonThread not marked with is_pydev_daemon_thread=True.\n') elif isThreadAlive(t): + if not self._running_thread_ids: + thread_id = GetThreadId(t, True) + curr_thread_id = GetThreadId(threadingCurrentThread()) + else: + thread_id = GetThreadId(t) program_threads_alive[thread_id] = t if not DictContains(self._running_thread_ids, thread_id): diff --git a/python/helpers/pydev/pydevd_constants.py b/python/helpers/pydev/pydevd_constants.py index f3281071b0f1..b7960c13d836 100644 --- a/python/helpers/pydev/pydevd_constants.py +++ b/python/helpers/pydev/pydevd_constants.py @@ -195,29 +195,38 @@ class NextId: _nextThreadId = NextId() + +#======================================================================================================================= +# GetPid +#======================================================================================================================= +def GetPid(): + try: + return os.getpid() + except AttributeError: + try: + #Jython does not have it! + import java.lang.management.ManagementFactory #@UnresolvedImport -- just for jython + pid = java.lang.management.ManagementFactory.getRuntimeMXBean().getName() + return pid.replace('@', '_') + except: + #ok, no pid available (will be unable to debug multiple processes) + return '000001' + + #======================================================================================================================= # GetThreadId #======================================================================================================================= -def GetThreadId(thread): +def GetThreadId(thread, update_pydevd_id=False): try: + if update_pydevd_id: + del thread.__pydevd_id__ return thread.__pydevd_id__ except AttributeError: _nextThreadIdLock.acquire() try: #We do a new check with the lock in place just to be sure that nothing changed if not hasattr(thread, '__pydevd_id__'): - try: - pid = os.getpid() - except AttributeError: - try: - #Jython does not have it! - import java.lang.management.ManagementFactory #@UnresolvedImport -- just for jython - pid = java.lang.management.ManagementFactory.getRuntimeMXBean().getName() - pid = pid.replace('@', '_') - except: - #ok, no pid available (will be unable to debug multiple processes) - pid = '000001' - + pid = GetPid() thread.__pydevd_id__ = 'pid%s_seq%s' % (pid, _nextThreadId()) finally: _nextThreadIdLock.release()