为什么返回语句中的PyDev断点只能在部分时间内起作用?

时间:2017-07-25 02:30:24

标签: python-2.7 debugging pydev

我有一些代码使用蒙特卡罗计算股票期权的价格并返回折扣价。相关方法的最后几行看起来像这样:

    if(payoffType == pt.LongCall or payoffType == pt.LongPut):
        discountedPrice=discountedValue
    elif(payoffType == pt.ShortCall or payoffType == pt.ShortPut):
        discountedPrice=(-1.0)*discountedValue
    else: 
        raise Exception
    #endif
    print  "dv:", discountedValue, " px:", discountedPrice
    return discountedPrice

在程序的更高级别,我创建了四个定价器,它们被传递给一个投资组合类的实例,该类投资组合在它收到的价格上调用 price()方法。

当我在 if 语句或 print 语句上设置断点时,断点按预期工作。当我在 return 语句中设置断点时,断点在第一次通过定价代码时被正确解释,但随后在后续传递中被跳过。

有时,如果我在第一次通过定价代码和第二次通过之间的执行流程中的某个地方设置了断点,那么断点将被拾取。

我显然有一个解决方法,但我很好奇是否有其他人在PyDev调试器中观察到这种行为,如果是这样,是否有人知道根本原因?

1 个答案:

答案 0 :(得分:0)

我所知道的问题是:

  1. 如果代码中的任何地方都有StackOverflowError,Python将禁用调试器使用的跟踪。

  2. 我知道异步代码存在一些问题,可能导致调试程序中断。

  3. 解决方法是使用程序化断点(即:pydevd.settrace - 远程调试器会话:http://www.pydev.org/manual_adv_remote_debugger.html有更多详细信息) - 即使Python在堆栈中破坏它也会重置跟踪溢出错误并且总是被命中(异步代码的问题是调试器试图使用非跟踪线程运行,但有时它在某些情况下无法在处理异步代码时恢复它。)