s pontos de interrupção @pydev não estão funcionando
Estou trabalhando em um projeto usando python 2.7.2, sqlalchemy 0.7, unittest, eclipse 3.7.2 e pydev 2.4. Estou definindo pontos de interrupção em arquivos python (arquivos de teste de unidade), mas eles são completamente ignorados (antes, em algum momento, eles funcionavam). Até agora, atualizei todos os softwares relacionados (veja acima), iniciei novos projetos, brinquei com as configurações, hipnotizei minha tela, mas nada funciona.
A única idéia que recebi de algum post é que ele tem algo a ver com a alteração de alguns nomes de arquivos .py para minúscula
Alguém tem alguma idéia
added:té instalei a versão aptana do eclipse e copiei o.py
arquivos para ele => mesmo resultado; pontos de interrupção ainda são ignorados.
ainda não há progresso:lterei um código que pode ser visto como incomum e substituí-o por uma solução mais diret
mais algumas informações: provavelmente tem algo a ver com o módulo mais unittest:
breakpoints nos meus arquivos que definem as suítes de teste funcionam, breakpoints nos arquivos mais unittest padrão funcionam elesbreakpoints nos meus métodos de teste em classes derivadas de unittest.TestCase não funcionam breakpoints no meu código que está sendo testado nos casos de teste não funcionam em algum momento antes que eu pudesse definir pontos de interrupção de trabalho nos métodos de teste ou no código que está sendo testado algumas coisas que mudei depois disso: comecei a usar suítes de teste, alterei alguns nomes de arquivos para minúsculas, ...sse problema também ocorre se meu código funcionar sem exceções ou falhas de testo que eu já tentei é:
retirar.pyc
arquivodefine novo projeto e copie somente.py
arquivos para elerebooted várias vezes entreupgraded to eclipse 3.7.2install pydev mais recente no eclipse 3.7.2 mude para o aptana (e para trás)ódigo @removed que adicionou manualmente 'classes' ao meu módulo brincou com algumas configuraçõeso que eu ainda posso fazer é:
inicie um novo projeto com o meu código, comece a remover / alterar o código até que os pontos de interrupção funcionem e classifique a caixa preta para descobrir se isso tem algo a ver com alguma parte do meu código Alguém tem alguma idéia do que pode causar esses problemas ou como eles podem ser resolvido Existe algum outro lugar onde eu possa procurar uma soluçãs desenvolvedores do pydev analisam as perguntas sobre o stackoverflo Existe uma versão mais antiga do pydev que eu poderia tentaEstive trabalhando com pydev / eclipse por um longo tempo e funciona bem para mim, mas sem a depuração, fui forçado a mudar de ID
Em resposta às perguntas de Fabio abaixo:
A versão python é 2.7, .2, O sys.gettrace não fornece None (mas não tenho idéia do que no meu código poderia influenciar isso)Esta é a saída do depurador depois de alterar os parâmetros sugeridos:pydev debugger:
starting
('Executing file ', 'D:\\.eclipse\\org.eclipse.platform_3.7.0_248562372\\plugins\\org.python.pydev.debug_2.4.0.2012020116\\pysrc\\runfiles.py')
('arguments:', "['D:\\\\.eclipse\\\\org.eclipse.platform_3.7.0_248562372\\\\plugins\\\\org.python.pydev.debug_2.4.0.2012020116\\\\pysrc\\\\runfiles.py', 'D:\\\\Documents\\\\Code\\\\Eclipse\\\\workspace\\\\sqladata\\\\src\\\\unit_test.py', '--port', '49856', '--verbosity', '0']")
('Connecting to ', '127.0.0.1', ':', '49857')
('Connected.',)
('received command ', '501\t1\t1.1')
sending cmd: CMD_VERSION 501 1 1.1
sending cmd: CMD_THREAD_CREATE 103 2 <xml><thread name="pydevd.reader" id="-1"/></xml>
sending cmd: CMD_THREAD_CREATE 103 4 <xml><thread name="pydevd.writer" id="-1"/></xml>
('received command ', '111\t3\tD:\\Documents\\Code\\Eclipse\\workspace\\sqladata\\src\\testData.py\t85\t**FUNC**testAdjacency\tNone')
Added breakpoint:d:\documents\code\eclipse\workspace\sqladata\src\testdata.py - line:85 - func_name:testAdjacency
('received command ', '122\t5\t;;')
Exceptions to hook : []
('received command ', '124\t7\t')
('received command ', '101\t9\t')
Finding files... done.
Importing test modules ... testAtomic (testTypes.TypeTest) ... ok
testCyclic (testTypes.TypeTest) ...
O restante é produzido no teste de unidad
Continuando da resposta de Fabio, parte 2:Adicionei o código no início do programa e o depurador para de funcionar na última linha de seguir o método em sqlalchemy \ orm \ attribute.py (é um descritor, mas como ou com que interfere na depuração está além) meu conhecimento atual):
class InstrumentedAttribute (QueryableAttribute): "" "Atributo instrumentado vinculado à classe que adiciona métodos de descrição." ""
def __set__(self, instance, value):
self.impl.set(instance_state(instance),
instance_dict(instance), value, None)
def __delete__(self, instance):
self.impl.delete(instance_state(instance), instance_dict(instance))
def __get__(self, instance, owner):
if instance is None:
return self
dict_ = instance_dict(instance)
if self._supports_population and self.key in dict_:
return dict_[self.key]
else:
return self.impl.get(instance_state(instance),dict_) #<= last line of debugging
A partir daí, o depurador entra no__getattr__
método de uma de minhas próprias classes, derivado de uma classe declarative_base () de sqlalchem
O problema parecia ser que o__getattr__
mencionado acima, criou algo semelhante à recursão infinita, no entanto, o programa / unittest / sqlalchemy se recuperou sem relatar nenhum erro. Eu não entendo o código sqlalchemy o suficiente para entender por que o__getattr__
método @ foi chamado.
Eu mudei o__getattr__
método para chamar super para o nome do atributo para o qual ocorreu a recursão (provavelmente não é a minha solução final) e o problema do ponto de interrupção parece ter desaparecido. Se eu puder formular o problema de maneira concisa, provavelmente tentarei obter mais informações no grupo de notícias sqlalchemy do google ou, pelo menos, verificar minha solução quanto à robuste
Obrigado Fabio pelo apoio, a função trace_func () identificou o problema para mim.