Newsgroup: it.comp.os.linux.development
Titolo: gdb remoto da win (sviluppare sotto win applicativi linux)

Ciao a tutti,
Sono riuscito a generare eseguibili linux x86 da windows utilizzando 
l'ide windows dev-c++ (che si appoggia ai tools gnu). Per fare questo 
ho crosscompilato gcc e binutils sotto cygwin. Ora vorrei utilizzare la 
parte di debugging integrata nell'ide (che si appoggia a gdb).
Il problema che ho e' che il gdb integrato in dev-c++ (mingw32) non 
pare funzioni debuggando target remoti (target remote ip:porta), ma 
funziona perfettamente debuggando in locale applicativi win... in 
particolare accetta il comando "gdb c:\pippo\pluto.exe" o qualcosa di 
simile, passatogli dall'ambiente. Viceversa sia il gdb di cygwin sia il 
gdb ottenuto crosscompilando sotto cygwin con target i686-linux dai 
sorgenti funziona debuggando da remoto, ma si arrabbia moltissimo se il 
percorso passato come parametro dall'ide e' in formato dos e non unix! 
Ho verificato infatti che mettendo l'exe in c:\cygwin\tmp e lanciando 
"gdb /tmp/pluto.exe" il debugger e' ok.
Per riassumere, credo (!) di aver bisogno di un gdb che debuggi su 
target remoti e che accetti come parametro un eseguibile con percorso 
di tipo dos.
PS: qualcuno ha provato a compilare il kernel sotto cygwin (es.2.6.14)? 
Ho problemi di libreria di internazionalizzazione gia' dal make 
menuconfig....
Lorenzo

Lorenzo,
Sto seguendo le tue mail sul NG in quanto mi trovo in una situazione
simile; anche io devo sviluppare un programma C++ su una macchina Linux
remota, non ho la possibilità di avere una gemella in locale ne di
utilizzare una macchina Linux su cui fare tutto, ho un desktop con
WinXP. Ho utilizzato il cygwin crosscompilando e facendo vari test, ma
poi alla fine devo fare girare l'applicativo sulla macchina linux
(PostgreSQL e compagni, basi dati, è tutto li). Ad ora sto utilizzando
MultiEdit per Windoze sui sorgenti del mio progetto per editare e
lavorare con il codice, l'editor è buono e mi permette di fare molte
cose, arrivo alla macchina remota con share samba quindi modifico
direttamente i sorgenti sulla macchina Linux. La cosa più bruttina è
che per compilare uso una sessione SSH sulla quale faccio i make e per
debuggare ho un client XWindows sul PC Windows ed eseguo DDD (frontend
di  GDB) in remoto.
La shell ssh può anche passare, comunque dovrei compilare in qualche
modo, ma il debug con applicazione X è una vaccata; visto che gli IDE
sono stati inventati qualche anno fa c'è qualcuno che ha un'idea più
pulita ?
Non so se la richiesta sia strana o OT ma mi sembra comunque un buon
argomento per un thread o al limite da inserire su FAQ
Grazie in anticipo a tutti
Ben

 argomento per un thread o al limite da inserire su FAQ
Personalmente ho un'unica macchina decente (un centrino 1.6GHz) su cui 
posso sviluppare, e odio il dual boot perche' ho tutto sotto XP; se 
passo sotto linux non ho la posta, i newsgroup (a meno di non 
riscaricarli con grande spreco di spazio prezioso su un portatile)... 
quindi, o mi faccio una seconda macchina solo per sviluppare in linux o 
sviluppo da windowsXP (di cui peraltro sono molto soddisfatto).
Lorenzo

 simile; anche io devo sviluppare un programma C++ su una macchina Linux
Ottime notizie: con CodeBlocks funziona anche il debug remoto!!!!!
Riepiloghiamo:
-copia i gcc, g++, c++ crosscompilati sotto cygwin in 
c:/programmi/CodeBlocks, magari anteponendo ai nomefile 
"i686-pc-linux-gnu-",
-apri CodeBlocks, "Build", "Compiler options" fai un nuovo compilatore 
(io ho fatto i686-pc-linux-gnu), in "Compiler flag" chekka "Produce 
debugging symbols" poi, nel tabs "programs" sostituisci i nomi dei file 
che iniziano con "mingw32-" con "i686-pc-linux-gnu-",
-nel tab "Directories" metti, nel sottotab "Compiler" gli include di 
linux, nel sottotab "Linker" le librerie... queste due te le puoi 
prendere da un'installazione linux su cui hai compilato le glibc 
(provero' con le uclibc).
FATTO! Sei gia' in grado di compilare un programma nativo linux sotto 
un bell'IDE per windows!
Vuoi anche debuggare? Dopo esserti copiato l'exe su una share samba, 
sul target linux dai il comando "gdbserver 
192.168.1.38:12345
 
./ilnomedellexe.exe" (ipotizzando che 192.168.1.38 sia l'ip dell'host, 
quello su cui gira l'IDE), mentre sull'ide *metti un breakpoint appena 
dentro il main()* (altrimenti parte l'esecuzione, e win non pare troppo 
felice di eseguire un applicativo linux :-), "Debug" "Send command to 
GDB", inserisci "target remote 
192.168.1.37:12345
" (ipotizzando che 
192.168.1.37 sia l'ip del target)... a questo punto sul target dovresti 
leggere "Remote debugging from host 192.168.1.38". "Debug", "Continue", 
e dovresti vedere la riga blu sul breakpoint (che sta a significare che 
l'esecuzione e' ferma sul breakpoint).
Bene, ora rimuovo delphi e dev-c++.. :-)))))))))
Ciao,
Lorenzo

Ti ho lasciato con una situazione non rosea, questa mattina leggo il NG
e vedo le tue osservazioni, complimenti :-)
Stavo pensando di installare il DEV, conosco Delphi e lo potrei
gestire, ma la seconda soluzione da te espressa mi sembra di gran lunga
più interessante...
Nel mio caso ho :
una macchina Linux, Debian 3.0, compilatore gnu c/c++, PostgreSQL, le
common C++ Libs e programmi vari; questa macchina mi fa da server, non
ha tastiera ne monitor, è remota
una macchina Windows XP, il mio portatile, al momento utilizzo le share
per arrivare direttamente ai sorgenti .cpp del mio programma, quindi in
locale ho solo l'editor e il Putty per le mie sessioni.
Voglio provare a riprodurre la tua situazione, nel mio caso mi installo
il Cygwin con tutto l'ambiente, CodeBlocks ed eventuali dipendenze;
voglio arrivare a compilare per Linux ed  a debuggare da Windows
direttamente.
Ho idea che nel mio caso ci sarà un pò di casino con il Cygwin,
voglio provare ad installare il Cpp compiler, le librerie postgresql e
le common c++ libs, poi ti so dire che cosa succede... speriamo bene
Ciao
Ottimo Lavoro !
Ben

 Ottimo Lavoro !
Grazie! :-)
Lorenzo

Allora, fermo tutto e cominciamo.
A parte il fatto che anche io ho delle piccole schede embedded con
Linux installato sopra e a questo punto mi interessa sapere che cosa
usi tu, se sono più economiche potrebbero essere interessanti, anche
io cross compilo applicativi linux per processori Axis, in tal caso
però sfrutto un SDK con il compilatore CRIS direttamente installato su
un altra macchina linux (ho un casino di macchine ed ambienti che non
immagini...).
In ogni caso, dato il fatto che il debug remoto si riesce a fare vorrei
arrivare al tuo punto sulla cross compilazione di applicativi linux
(x86) all'interno del sistema operativo Windoze. Questo argomento esce
un pò dal thread, se vuoi passiamo in PVT, ma mi interessa perchè
cercando su google di solito trovo il contrario (Compilare Win32 da
Linux), ho trovato dei testi di Mumit Khan per compilare binari ELF
linux da Win32 ma non ho ancora capito niente.
Come fai a crosscompilare per x86 Linux da Win ? che cosa hai
installato oltre all'ambiente cygwin ? hai qualche link a cui fare
riferimento ?
Grazie ancora per le eventuali dritte,
la mia email è andreaBILLbenini chiocciola yahoo punto it, elimina
BILL per rispondere
Grazie
Ben

 riferimento ?
Sotto windows occorre cygwin (ma FORSE e' sufficiente mingw, non ho 
provato) e un IDE di tuo gradimento che si appoggi ai tools GNU.
Ti setti in cygwin la variabile d'ambiente TARGET con i686-pc-linux-gnu 
(se il tuo target e' tale) poi compili le binutils (assemblatore, 
linker...) e il gcc. Cygwin lo usi quindi solo per crosscompilarti i 
tools. Vai sulla tua macchina linux i686 e metti sullo share le glibc 
(o le uclibc se ti bastano, dipende da quello che devi fare), e te le 
copi in windows insieme ovviamente agli include. NON DEVI 
CROSSCOMPILARE LE LIBRERIE!
Infine, all'IDE windows che hai scelto dici di usare il gcc, ar, ld, 
ecc ecc che ti sei crosscompilato, e che le librerie e gli include deve 
prenderli da quelli che ti sei copiato dalla macchina linux.
A questo punto puoi provare a farti un poderoso applicativo "hello 
world" dentro al tuo IDE preferito; lo compili, copi l'exe nella share 
samba e, dalla macchina linux, lo lanci.
Prego chi ne sa di piu' di correggere/integrare quanto sopra.
Se hai bisogno sono qui,
Lorenzo

Sto mettendo in piedi tutto l'ambaradan per fare quello che hai detto,
se non ti rompo probabilmente ti interpello ancora visto che è la
prima volta che faccio una cosa del genere, in ogni caso per esserti
utile ti giro questo link:
http://programming.ccp14.ac.uk/mumit-khan/~khan/software/gnu-win32/cygwin-to-linux-cross-howto.txt
Questo soggetto ne sa a pacchi, da quello che vedo tutti i riferimenti
in giro per internet puntano ad un qualche tipo di lavoro prodotto da
lui, peccato che la maggior parte dei link ai suoi lavori originali
siano tutti non funzionanti.
Se poi arrivo in fondo a questo sistema volevo scrivere un piccolo
howto visto che quello che hai cominciato a sperimentare tu non è
banale e che di documentazione in rete chiara non se ne trova, di
solito trovi il contrario (da Lin a Win), chi come me è obbligato ad
utilizzare una macchina Win non sa da dove partire. Faccio un pò di
test e mi rifaccio vivo.
Ben

 o sviluppo da windowsXP (di cui peraltro sono molto soddisfatto).
Potresti tirarti su una Virtual Machine (VMWare o Virtual PC o ... ) con 
linux (qualcosa di leggero come Arch Linux )
su cui installare l'ambiente di sviluppo preferito per lavorare. Il resto 
lo tieni su XP senza problemi di spazio e di strumenti da utilizzare.
CIAO