Wie debuggt man die Anwendung als Root in Eclipse in Ubuntu?

Lesezeit: 6 Minuten

Benutzeravatar von futang
Futang

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

  • Führen Sie Ihren Debugger grundsätzlich als root aus. Versuchen Sie, einen Debugger über eine IDE zu verwenden?

    – Artelios

    23. Mai 2010 um 10:33 Uhr

  • Können Sie mir sagen, wie man den Debugger als Root ausführt? Ja, ich verwende die Eclipse-IDE.

    – Futang

    23. Mai 2010 um 12:37 Uhr

  • Wenn Sie Ihre IDE nicht auch als Root ausführen, gibt es wahrscheinlich keine einfache oder direkte Möglichkeit, Ihren Debugger als Root auszuführen.

    – Nategans

    23. Mai 2010 um 21:50 Uhr

Benutzeravatar von xmoex
xmoex

  1. Ermöglichen Sie Ihrem Benutzer, gdb als root auszuführen, ohne nach einem Passwort gefragt zu werden:
    sudo visudo

    Fügen Sie nach allen anderen Regeln die folgende Zeile hinzu:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb

  2. Erstellen oder ändern Sie eine Debug-Konfiguration in Eclipse, um gdb als root auszuführen
    zB in Run > Debug Configurations > C/C++ Application > YourProject Debug:
    Wechseln Sie Debugger > Main > GDB-Debugger aus gdb zu sudo -u <youruser> gdb

Update (und Warnung!):

In seinem Kommentar wies nategoose darauf hin, dass diese Antwort eine Warnung enthalten sollte:

Aktivieren eines Benutzers zur Verwendung sudo zum gdb wie in meiner Antwort vorgeschlagen gibt ihm/ihr tatsächlich Administratorrechte was in vielen Fällen eine unerwünschte Nebenwirkung sein kann. Ich halte die Antwort daher für angemessen in einer Umgebung, in der nicht davon ausgegangen wird, dass der Benutzer versuchen würde, das System zu beschädigen (z. B. Ihr eigener PC oder eine virtuelle Maschine).

Für eine Umgebung mit mehreren (nicht vertrauenswürdigen) Benutzern ist es meiner Meinung nach besser geeignet, sie zu verwenden Dateifähigkeiten von Unix ermöglichen gdb um eine Anwendung ohne Administratorrechte zu debuggen

  • Brillante Antwort, beachten Sie für andere ein kleines Problem, auf das ich gestoßen bin: Ich habe LD_LIBRARY_PATH als meinen Benutzer festgelegt, aber root hat es nicht, also habe ich es zu meinem sudo-Befehl hinzugefügt, aber sudo erlaubt Ihnen nicht, LD_LIBRARY_PATH festzulegen, also habe ich hinzugefügt dies in visudo ‘Defaults env_keep += “LD_LIBRARY_PATH”‘

    – Stu

    15. Juni 2015 um 19:33 Uhr

  • Ich bekomme Fehler Could not determine GDB version using command: sudo -u debug gdb --version Wie man es löst?

    – fralbo

    28. November 2018 um 15:32 Uhr

  • Ich konnte debuggen udisksd als root in KDevelop mit den leicht modifizierten 2 Schritten aus der Antwort: 1. Der erste Schritt ist praktisch, aber nicht notwendig, da KDevelop vom Terminal gestartet werden kann und das Root-Passwort dort bei einer Eingabeaufforderung beim Auslösen der Debug-Aktion eingegeben werden kann. 2. Im Hauptmenü von KDevelop -> Ausführen -> Starts konfigurieren… -> Seitenset debuggen /usr/local/bin/run-as-sudo in dem Shell-Skript aufstellen. Dieses lokale Skript muss erstellt und als ausführbar markiert werden. Sein Inhalt (2 Zeilen): #!/usr/bin/env bash \n sudo "$@". Diese Antwort ist sudo -u <youruser> hat bei mir nicht funktioniert.

    – veg

    19. Januar 2019 um 15:02 Uhr


Sie können gdbserver auf localhost verwenden, um einen vorhandenen Prozess anzuhängen, das Folgende ist die Befehlszeile:

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

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

sudo gdbserver :<listening port> <process executable>

Dann können Sie eine Debugging-Konfiguration in Eclipse erstellen, auf der Registerkarte „Debugger“ das Debugger-Element auswählen, „gdbserver“ auswählen und den Überwachungsport auf der Registerkarte „Verbindung“ unten eingeben.

Benutzeravatar von davidag
davidag

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

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

  • Dies ist keine gute Idee, wie hier erklärt: stackoverflow.com/questions/2580279/…

    – Paolo M

    20. März 2015 um 14:51 Uhr

  • Ich stimme Ihnen zu, Paolo, die xmoex-Antwort ist eine viel bessere Lösung.

    – davidag

    21. März 2015 um 20:06 Uhr

Eine andere Lösung besteht darin, Ihnen (oder der ausführbaren gdb-Datei) die Rechte zu erteilen, einige pcap-Aufnahmen als zu machen hier erwähnt. Mit so etwas:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb

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

So habe ich es gemacht:

Ein … kreieren C/C++ Remote-Anwendung

  1. Stellen Sie auf dem Ziel sicher, dass Ihr sudo nicht zur Eingabe eines PW auffordert
  2. Ansehen Debug-KonfigurationenDebuggerPort-Nummer
  3. Bearbeiten Debug-KonfigurationenHauptsächlichBefehle, die vor der Anwendung ausgeführt werden sollen

Ändern:

sudo gdbserver :<port number> <path to application>;exit #

Dies wird im Grunde die ausführen gdbserver das würde normalerweise von eclipse innerhalb der ausgeführt werden sudodas nachfolgende ‘#‘ verhindert, dass der Eclipse-Befehl ausgeführt wird.

Benutzeravatar von yehudahs
Jehuda

Diese Frage wurde vor langer Zeit gestellt, aber wenn dies jemandem hilft, öffne ich einen Fehler in Bugzilla und dieser kurze Thread hat das Problem gelöst:
Bugzilla-Fehler

Benutzeravatar von nategoose
Nategans

Von der Konsole im Verzeichnis mit Ihrer ausführbaren Datei:

sudo gdb ./my_program

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

Von der Konsole:

sudo gdbserver localhost:<port_number> ./my_program

Teilen Sie Eclipse dann die Adresse mit (localhost und die von Ihnen gewählte Portnummer).

Oh ja, du sagtest, der Grund, warum du das tust, sei, weil du konsumierst libpcapdaher möchten Sie möglicherweise kein Remote-Debugging über TCP verwenden, da Sie möglicherweise Ihre Debugging-Verbindungspakete zusätzlich zu Ihrem anderen Netzwerkverkehr erfassen.

In diesem Fall führen Sie Ihr Remote- (aber wirklich lokales) Debugging über eine serielle Schnittstelle durch. Ich habe das noch nie auf einem lokalen Computer gemacht, aber Sie könnten zwei tatsächliche serielle Ports verwenden (sie über ein Nullmodem anschließen) oder versuchen, ein Psudoterminal zu verwenden:

sudo gdbserver /dev/ptmx ./my_program

Dadurch wird das Psudo-Terminal unter erstellt /dev/pts/ aber Sie müssen den Namen herausfinden, und es könnte auch mit restriktiven Berechtigungen erstellt werden. Die kannst du umgehen. Wenn Sie nicht viele Terminalfenster als root ausführen, ist es unwahrscheinlich, dass Sie viele Einträge unter haben /dev/pts die zu root gehören, notieren Sie sich also denjenigen, der nach dem Ausführen des obigen Befehls und dann ausgeführt wird sudo chmod oder sudo chown es, um es für Ihren normalen Benutzer nutzbar zu machen, und weisen Sie dann Ihren Debugger an, dies als Ihre serielle Verbindung zu Ihrem Remote-Debugging-Ziel zu verwenden.

1393310cookie-checkWie debuggt man die Anwendung als Root in Eclipse in Ubuntu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy