Python嵌入程序的调试

最近的这个项目,是利用Python操作文本的方便和快捷性,嵌入到项目中处理文本文件。目前做的就是将Python解释器集成到程序里面,然后附带一个Python24.dll,不过这样好像还是差一个文件的,msvcr71.dll,开始测试的时候,由于机器里面装有Python24,没有测试出来,到客户那里演示的时候,才发现没有这个文件,幸亏带了Python的安装包,要不然就出丑了。


由于昨天对脚本进行了一些改动,改动的结果感觉差不多,就没有测试直接给演示了,导致演示中出现了一个小问题,改动部分的脚本执行有问题,程序调用返回始终是NULL。开始以为是脚本调用错了,后来以为是缓存的问题,总之排除了很多外在的因素后,最后认为Python的脚本有问题。最后查得得结果是处理传出来的数据结构中,脚本处理有问题,导致单独执行的时候没错(因为测试用的数据结构没有和传出来的匹配),但是集成处理有问题。


开始的时候,就是准备将Python执行的日志集成进去,不过由于偷懒,只做了程序的,没有做脚本的。认为脚本在本地执行了,程序再去执行是应该没有问题的,现在发现还有有些不同,需要处理的。看来把Python的执行日志集成进去是必要的,否则临时修改脚本,出错了就不好找问题所在了。

This entry was posted in Python. Bookmark the permalink.

2 Responses to Python嵌入程序的调试

  1. wujunyu@google.com says:

    帮个忙。

    我的论文希望使用PYTHON,但我不知道为什么我的程序出现很多连接错误!

    我希望作成模块供调用。另有一篇文章讲到似乎是不提供DEBUG版本的DLL,我想知道在DEV-CPP中如何,改变编译模式,生成RELEASE版本?

    代码如下—————————————————————————-

    #include <windows.h>

    #include "Python.h"

    #include "dll.h"

    #include <stdio.h>

    #include <stdlib.h>

    #include <math.h>

    /*class Tank

    {public:

    Tank()

    forward()

    backward()

    turn(int angle)

    private:

    int angle; //方向角

    int x,y; //x,y坐标

    int step; //速度

    }

    */

    //——————————————————————————

    static PyObject *tank_forward(PyObject *pSelf,PyObject *pArgs)

    {int angle,x,y,step;

    PyArg_ParseTuple(pSelf,"i(ii)i",&angle,&x,&y,&step);

    x+=(int)(step*cos(angle));

    y+=(int)(step*sin(angle));

    return Py_BuildValue("i(ii)i",angle,x,y,step);

    }

    //——————————————————————————

    static char count_doc[]="Class Tank!";

    //——————————————————————————

    static PyMethodDef tank_methods[]=

    {{"forword",tank_forward,METH_VARARGS,NULL},

    {NULL,NULL}

    };

    //——————————————————————————

    DL_EXPORT(void) initTank()

    {Py_InitModule("Tank",tank_methods);

    }

    //——————————————————————————

    BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,

    DWORD reason /* Reason this function is being called. */ ,

    LPVOID reserved /* Not used. */ )

    {

    switch (reason)

    {

    case DLL_PROCESS_ATTACH:

    break;

    case DLL_PROCESS_DETACH:

    break;

    case DLL_THREAD_ATTACH:

    break;

    case DLL_THREAD_DETACH:

    break;

    }

    /* Returns TRUE on success, FALSE on failure */

    return TRUE;

    }

    =====================================================================================

    错误 [Linker error] undefined reference to `_imp__PyArg_ParseTuple’

    [Linker error] undefined reference to `_imp__Py_BuildValue’

    [Linker error] undefined reference to `_imp__Py_InitModule4′

    ld returned 1 exit status

    E:\Makefile.win [Build Error] [tank.dll] Error 1

  2. leejd says:

    debug是自己下载Python的源码进行编译的

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*

Anti-spam image