[Python-de] probleme mit debuggen eines Python prozesses

robert rottermann robert at redcor.ch
Son Dez 11 10:28:15 CET 2005


Hallo,
ich möchte einen Zope-Process der von Zeit zu Zeit 99.9 % CPU frist 
untersuchen.
Dazu habe ich ein Howto gefunden (http://zopelabs.com/cookbook/1073504990)
das emfiehlt einen traceback desjenigen Threads zu erzwingen.
Dazu soll fogendes gemacht werden:
1. mit gdb an den Zope Prozess attachen
2. mit info treads den sunder suchen
3. den sunder zum default machen mit thread X
4. sich mit call PyRun_SimpleString(...) einen traceback in eine datei 
schreiben lassen

Meine Probleme:
1. Schon die Thread info sieht anders aus als erwartet
    Laut Dokumentation erwarte ich  in etwa Folgendes:

(gdb) info threads
  3 process 35 thread 27  0x34e5 in sigpause ()


2. Ich habe es nicht fertiggebracht, dass "call PyRun_SimpleString.."
    etwas anderes als einen Fehler produzierte.

Was mach ich falsch?

Danke für eure Hilfe.
Robert

hier meine Schritte, und der produzierte output:

gdb python
(gdb) info threads
  11 Thread 1109482416 (LWP 13933)  0xffffe410 in ?? ()
  10 Thread 1111583664 (LWP 13934)  0xffffe410 in ?? ()
  9 Thread 1113684912 (LWP 13935)  0xffffe410 in ?? ()
  8 Thread 1115786160 (LWP 13936)  0xffffe410 in ?? ()
  7 Thread 1117887408 (LWP 13937)  0xffffe410 in ?? ()
  6 Thread 1119988656 (LWP 13938)  0xffffe410 in ?? ()
  5 Thread 1122089904 (LWP 13939)  0xffffe410 in ?? ()
  4 Thread 1124191152 (LWP 13940)  0xffffe410 in ?? ()
  3 Thread 1126292400 (LWP 13941)  0xffffe410 in ?? ()
  2 Thread 1128393648 (LWP 13942)  0xffffe410 in ?? ()
  1 Thread 1076090240 (LWP 13927)  0xffffe410 in ?? ()
(gdb) thread 1
[Switching to thread 1 (Thread 1076090240 (LWP 13927))]#0  0xffffe410 in 
?? ()

(gdb) call PyRun_SimpleString("import sys, traceback; 
sys.stderr=open('/tmp/tb','w',0); traceback.print_stack()")

Program received signal SIGABRT, Aborted.
0xffffe410 in ?? ()
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on"
Evaluation of the expression containing the function 
(PyRun_SimpleString) will be abandoned.
(gdb)