Ik “zit momenteel vast met het probleem van foutopsporing op afstand van mijn applicatie met gdb. Ik zou graag de mogelijkheid om verbinding te maken met een extern proces en IDE “s visuele debugging te gebruiken (ik gebruik Visual Studio Code).

De Het probleem is dat IDE zich kan hechten aan een lokaal proces door zijn pid, wat niet echt nuttig is. Dus als ik lokale port forwarding verzoek, zou ik de lokale poort kunnen gebruiken om de verbinding door te sturen, wat opnieuw niet echt is wat ik wil.

Is het mogelijk om zoiets te doen als “pid-forwarding”, dat wil zeggen, ik stel wat pid wat eigenlijk een proces op afstand is.

Reacties

  • Jij ' ik vertel niet wat IDE gebruikt (en aangezien ik ' geen IDE gebruik, zou ik waarschijnlijk ' niet zijn u kunnen helpen). Maar je zou naar gdbserver moeten kijken – dat ' is een klein programma dat zou kunnen draaien op een embedded / terughoudend systeem, en je zou er verbinding mee kunnen maken met de ' fat debugger ' van een krachtigere machine.
  • @UncleBilly Ik deed het. " Ik gebruik Visual Studio Code ". Helaas is gedocumenteerd dat het geen debugging op afstand ondersteunt …
  • @UncleBilly gdbserver klinkt alsof het is wat ik wilde. Bedankt.

Antwoord

Als Oom Billy zegt, een leuke manier om dit te doen is door gebruik te maken van GDBs debugging mogelijkheden op afstand. Dit werkt door een “kleine” debugger uit te voeren op de host die het proces uitvoert dat u wilt debuggen, en er verbinding mee te maken met gdb vanaf de host die uw ontwikkelomgeving draait. Aangezien veel IDEs (inclusief VS Code) foutopsporing ondersteunen met gdb, kunt u het comfort van uw ontwikkelomgeving krijgen gericht op processen die overal worden uitgevoerd, ook op andere platforms.

Op de host waarop het proces draait dat u wilt debuggen, moet u gdbserver installeren (vaak door een statisch binair bestand te kopiëren), en het uitvoeren; bijvoorbeeld:

gdbserver --attach :9953 ${pid} 

wordt vermeld op poort 9953 en wordt gekoppeld aan het opgegeven proces-ID. U kunt verschillende manieren specificeren om verbinding te maken met de server (seriële poorten, IP-adressen …), en ofwel een commando uitvoeren om te debuggen, of aan een lopend proces te koppelen, of zelfs een “debugging server” draaien zonder specifiek proces .

Op de host met uw ontwikkelomgeving maakt u verbinding met het doel binnen gdb:

$ gdb ... (gdb) target remote <IP address>:9953 

Al het andere werkt zoals gewoonlijk. gdb zal bestanden die het nodig heeft (bibliotheken enz.) overdragen vanaf het externe doel, maar om dingen te versnellen kun je het naar een lokale kopie van de bestanden verwijzen. Het zal lokale bronnen gebruiken.

Dit werkt zoals je zou verwachten als de twee hosts hetzelfde zijn, maar het kan ook worden gemaakt om te werken met verschillende hosts, bijv. om te debuggen een Windows-programma vanaf een Linux-systeem, of meer typisch een programma dat draait op een klein ingebed systeem vanaf een groter ontwikkelingsplatform.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *