2009-12-27 10 views
5

Mit gdb versuche ich, die Funktionsaufrufe eines Web-Servers zu verfolgen. Ich setze Haltepunkte bei jedem Funktionsaufruf und wenn ich gdb rufe 'run', bricht es an den richtigen Stellen, während der Server startet. Dann sagt gdb 'Programm endete mit Code 01' und stoppt nicht mehr (offensichtlich) an Haltepunkten. Der Webserver wird jedoch weiterhin ausgeführt.läuft gdb auf einem Webserver

Ich möchte in der Lage sein, die Funktionsaufrufe auf eine eingehende HTTP-Anfrage zu verfolgen, so dass es einfach nutzlos ist, während des Server-Startvorgangs zu brechen.

Gibt es einen Trick bei der Verwendung von gdb beim Verfolgen eines Daemon-Servers, damit er nicht einfach wie oben endet?

Antwort

1

Set Follow-Gabel-Modus Kind

siehe http://www.delorie.com/gnu/docs/gdb/gdb_26.html zum Beispiel

+0

Wenn es sich bei dem betreffenden Webserver um Apache handelt, funktioniert die Einstellung von follow-fork-mode wahrscheinlich * nicht *: Apache gibt standardmäßig mehrere untergeordnete Elemente aus, und Sie wissen nicht, welche eine bestimmte Anfrage verarbeiten soll. Die Einstellung "MaxClients 1" ist wahrscheinlich ebenfalls erforderlich. –

2

Sie nicht sagen, welche Server Sie verfolgen wollen, aber wahrscheinlich es ist, Apache.

Detaillierte Anweisungen sind here. Beachten Sie das Befehlszeilenargument -X, das verhindert, dass httpd untergeordnete Elemente abzweigt.

Beachten Sie auch, dass die Anweisungen das erste Ergebnis für this Suche sind.