2010-05-23 11 views
30

Ich programmiere Anwendung mit libpcap. Wenn ich die Anwendung im normalen Modus debugge, kann pcap das Netzwerkgerät nicht abrufen. es scheint, dass ich die Anwendung im root debuggen muss. Wie kann ich die Anwendung im root debuggen? Ich habe das root-Passwort. Ich denke, Eclipse hat eine solche Option, die Root für die Debug-Anwendung hinzufügen kann, aber ich weiß nicht, wie es geht. bitte helfen.wie Anwendung als Root in Eclipse in Ubuntu zu debuggen?

+1

Grundsätzlich führen Sie Ihre Debugger als root. Versuchen Sie, einen Debugger über eine IDE zu verwenden? – Artelius

+0

Können Sie mir sagen, wie Debugger als root ausgeführt werden? Ja, ich benutze Eclipse IDE. – futang

+0

Sofern Sie nicht auch Ihre IDE als root ausführen, gibt es wahrscheinlich keine einfache oder direkte Möglichkeit, Ihren Debugger als root auszuführen. – nategoose

Antwort

-1

der Konsole in das Verzeichnis mit der ausführbaren:

sudo gdb ./my_program 

Wenn Eclipse dann Remote-Debugging unterstützt tun könnten Sie, dass, obwohl es lokal ausgeführt wird.

der Konsole:

sudo gdbserver localhost:<port_number> ./my_program 

Und dann sagen Eklipse die Adresse (localhost und die Port-Nummer, die Sie gewählt haben).

Oh ja, Sie sagten, der Grund, warum Sie dies taten, war, weil Sie libpcap verwendeten, also möchten Sie möglicherweise nicht Remote-Debugging über TCP verwenden, weil Sie Ihre Debugging-Verbindungspakete zusätzlich zu Ihrem anderen Netzwerkverkehr erfassen können .

In diesem Fall tun Sie Ihre Remote (aber wirklich lokal) Debugging über eine serielle Schnittstelle. Ich habe noch nie auf einem lokalen Rechner getan, aber man kann zwei tatsächliche serielle Ports verwenden oder versuchen (sie jedoch ein Nullmodem-Befestigung) eine psudoterminal mit:

sudo gdbserver /dev/ptmx ./my_program 

Das das psudoterminal unter /dev/pts/ erstellen, aber Sie Ich muss den Namen herausfinden, und es könnte auch mit restriktiven Berechtigungen erstellt werden. Sie können diese umgehen. Sofern Sie nicht viele Terminal-Fenster als root ausführen, ist es unwahrscheinlich, dass Sie viele Einträge unter /dev/pts haben, die zu root gehören. Beachten Sie also die nach dem Ausführen des obigen Befehls und dann sudo chmod oder sudo chown, um es nutzbar zu machen für Ihren normalen Benutzer und weisen Sie dann Ihren Debugger an, das als Ihre serielle Verbindung zu Ihrem Ferndebuggingziel zu verwenden.

3

Starten von Eclipse mit sudo (nur der Vollständigkeit halber: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)

Update: Folgen Sie xmoex Lösung. Wenn Sie Eclipse als Root ausführen (dh mit sudo), sind Ihre Dateien root-owned ... was Sie wahrscheinlich nicht wollen.

+0

Dies ist keine gute Idee, wie hier erklärt: http://stackoverflow.com/questions/2580279/how-do-irun-my-application-as-superuser-from-eclipse#comment2588681_2580560 –

+0

Ich stimme dir Paolo , xmoex Antwort ist eine viel bessere Lösung. –

56
  1. Ermöglichen Sie Ihren Benutzer als root ausführen, ohne für jedes Passwort gefragt zu werden:
    sudo visudo
    Fügen Sie die folgende Zeile nach allen anderen Regeln:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. erstellen oder eine Debug-Konfiguration in ändern gdb als root ausführen
    z in Run> Debug-Konfigurationen> C/C++ Applikation> IhrProjekt Debug:
    Änderung Debugger> Haupt> GDB-Debugger von gdb zu sudo -u <youruser> gdb

Update (und Warnung!):

In seinem Kommentar nategoose wies darauf hin, dass diese Antwort mit einer Warnung kommen sollte:

Aktivieren eines Benutzers sudo für gdb wie in meiner Antwort gibt ihm/ihr Admin-Rechte in der Tat vorgeschlagen verwenden was in vielen Fällen eine unerwünschte Nebenwirkung sein könnte. Daher halte ich die Antwort in einer Umgebung für angemessen, in der nicht davon ausgegangen wird, dass der Benutzer versuchen würde, das System zu beschädigen (z. B. Ihr eigener Computer oder eine virtuelle Maschine)

Für eine (nicht vertrauenswürdige) Mehrfachbenutzerumgebung ich denke, es könnte eine bessere idead sein unix' file capabilities zu nutzen gdb zu ermöglichen, eine Anwendung zu debuggen, ohne die Notwendigkeit von Admin-Rechte

+4

Ich habe den Debugger von gdb in sudo gdb geändert und es funktioniert. – shahensha

+1

Brilliante Antwort, Hinweis für andere ein kleines Problem, das ich dabei tat: Ich habe LD_LIBRARY_PATH als mein Benutzer, aber root hat es nicht, also habe ich es zu meinem Sudo-Befehl hinzugefügt, aber sudo erlaubt es nicht, LD_LIBRARY_PATH so ich hinzugefügt dies in visudo 'Defaults env_keep + = "LD_LIBRARY_PATH"' – stu

1

eine andere Lösung ist, dass Sie (oder die gDB ausführbare) die Rechte zu gewähren, um einige pcap als mentioned here zu machen einfängt. Mit etwas wie diesem:

sollten Sie in der Lage sein, Pakete zu gdb zu erfassen, ohne root zu sein.

+0

Dies funktionierte, wenn als Super-User ausgeführt. Auch das Remote-Debugging wird erleichtert, indem auch Zugriff auf pcap-Captures auf 'gdbserver' gewährt wird. – fredk

0

diese Frage wurde schon vor langer Zeit gefragt, aber wenn dies jemand helfen wird, öffne ich einen Fehler in Bugzilla und diesem kurzen Faden löste das Problem: bugzilla bug

3

Sie können gdbserver auf localhost verwenden, um einen bestehenden Prozess anhängen folgendes ist die Befehlszeile ein:

sudo gdbserver :<listening port> --attach <pid> 

Oder Sie können einen neuen Prozess mit gdbserver erstellen:

sudo gdbserver :<listening port> <process executable> 

Anschließend können Sie in Eclipse eine Debugging-Konfiguration erstellen, auf der Debugger-Registerkarte den Debugger-Eintrag, gdbserver auswählen und den Listening-Port auf der Registerkarte Verbindung eingeben.

-1

einfachste Weg, versuchen Sie sudo ./eclipse, dann als debuggen üblichen

+0

Bitte geben Sie keine doppelte Antwort an. – lnman

Verwandte Themen