[Python-de] ich suche die Datei "pythonrun.c"

Gerhard Häring haering_python at gmx.de
Mon May 13 04:11:04 EDT 2002


* Marcus <m_konermann at gmx.de> [2002-05-12 23:56 +0200]:
> Hallo Gerhard !
> 
> Vielen Dank für deine konkrete direkte Hilfe!

Cc an python-de, denn du bist nicht der erste und wohl auch nicht der letzte
mit dem Problem ;-)

> Ich habe mich bislang immer gescheut Python zu debuggen, weil ich schon
> öfters gelesen habe, dass es wohl zu Problemen kommt,

Nicht, wenn man distutils verwendet.

> zum anderen wüsste ich gar nicht wie es unter Visual C++ 6.0 funktionieren
> soll.

Ich hatte vor kurzem schon mal geschrieben, dass es nett wäre, wenn es entspr.
Anleitugnen für die üblichen Plattformen (Win32 MSVC, win32 gcc, Unix gcc, Mac
CodeWarrior) geben würde. Eine minimale englische Anleitung für mingw/win32
habe ich mal an python-list gepostet und ist scheinbar mittlerweile auch als
Recipe auf der ActiveState-Seite zu finden.

Hier was Ähnliches für MS Visual C++. Ergänzungen, Korrekturen, zusätzliche
nützliche Tips zum Debuggen mit dieser Konstellation sind willkommen. Bitte
aber auf der Liste, wenn möglich. 


Micro-HOWTO zum Debuggen von Python-Extensions mit Visual C++
=============================================================

1) Visual C++ installieren mit der Option "Umgebungsvariablen registrieren"
2) Python-2.2.1.tgz von http://www.python.org/ holen und entpacken.
3) PCbuild/readme.txt lesen und verstehen; fertig :-)
4) PCbuild/pcbuild.dsw öffnen
5) Build/Batch Build/Rebuild all

--- cut mkrelease.bat ---
SET DEST=%1
mkdir %DEST%
mkdir %DEST%\dlls
mkdir %DEST%\libs
xcopy /I /E /Y lib %DEST%\lib
copy PCbuild\*.exe %DEST%
copy PCbuild\*.dll %DEST%
copy PCbuild\*.pyd %DEST%\dlls
copy PCbuild\*.lib %DEST%\libs
xcopy /I /E /Y Include %DEST%\Include
copy PC\pyconfig.h %DEST%\Include
--- cut mkrelease.bat ---

mkrelease.bat im Python-Sourceverzeichnis speichern und z. B. mit mkrelease.bat
c:\tmp\py ausführen

/* BEGIN FILE crash.c ***********************************************/
#include "Python.h"

PyObject* crash()
{
    char* ptr = (char*)0;
    *ptr = 'X';
    
    Py_INCREF(Py_None);
    return Py_None;
}

static PyMethodDef crashMethods[] = {
    {"crash", (PyCFunction)crash, NULL, NULL},
    {NULL, NULL}
};

DL_EXPORT(void) initcrash(void)
{
    PyObject *m;

    m = Py_InitModule("crash", crashMethods);
}

/* END FILE crash.c ************************************************/


###### BEGIN setup.py ###############################################
import sys

from distutils.core import setup
from distutils.extension import Extension

setup (
    name = "crash",

    ext_modules = [Extension(
        name="crash",
        sources = [ "crash.c" ]
        )],
)
###### END setup.py --###############################################


C:\tmp>py\python.exe setup.py build --debug
running build
running build_ext
building 'crash' extension
[...]

C:\tmp>cd build\lib.win32-2.2

C:\tmp\build\lib.win32-2.2>c:\tmp\py\python_d.exe
Adding parser accelerators ...
Done.
Python 2.2.1 (#34, May 13 2002, 02:16:05) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import crash
[7974 refs]
>>> crash.crash()

Irgendwas in der Richtung "python_d.exe has encountered a problem and needs to
close. We are sorry for the inconvenience." wird aufpoppen mit einem Button
"Debug". Diesen drücken. Wenn er den Pfad zu crash.c nicht findet, diesen
angeben.

Soweit zum direkten Herausfinden der Stelle von Segmentation Faults. Jetzt will
man aber auch Breakpoints setzen, bevor das Programm/die Library Mist baut.
Kein Problem:

C:\tmp\build\lib.win32-2.2>c:\tmp\py\python_d.exe
Adding parser accelerators ...
Done.
Python 2.2.1 (#34, May 13 2002, 02:16:05) [MSC 32 bit (Intel)] on win3
Type "help", "copyright", "credits" or "license" for more information.
>>> import crash
[7974 refs]

Visual C++ anwerfen; Build/Start Debug/Attach to Process; python_d.exe
auswählen; File crash.c öffnen und Breakpoint auf "*ptr = 'X';" setzen. Danach
in der interaktiven Python-Session crash.crash() ausführen. Voilà: der
Breakpoint wird erreicht.

HTH,

Gerhard
-- 
This sig powered by Python!
Außentemperatur in München: 10.4 °C      Wind: 0.4 m/s



More information about the Python-de mailing list