Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-01-2009, 17:28   #1
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
[c++] eccezioni in librerie dinamiche non catturate

Dal titolo complesso ... si evince che ho un problema complesso .....

allora ho due librerie dinamiche(lib1 e lib2) è un esegubile(runner) ...

l'eseguibile runner usa lib1 a "linktime" e lib2 a runtime con dlopen()

ho un flusso applicatiovo del tipo:
runner->lib1->lib2->lib1
(tradotto in italiano il runner chiama una funzione di lib1 che chiama una funzione di lib2 che a sua volta richiama una funziona di lib1)

nell'ultima chiamata viene lanciata un'eccezione che dovrebbe essere gestita all'interno del codice della prima chiamata a lib1 .... ma l'eccezione sale fino a far crasshare il programma come se nn ci fosse nessun catch()...

leggendo su internet ho trovato informazioni rigardo a possibilità di problemi con le eccezioni con librerie dinamiche ...
sapreste dirmi perche il catch nn cattura l'eccezione anche se il codice è giusto e compila?

se volete vi faccio qualche esempio di codice per spiegarmi meglio
grazie ciao!!
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 11:39   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da tglman Guarda i messaggi
se volete vi faccio qualche esempio di codice per spiegarmi meglio
Ecco, sarebbe molto interessante. Qualcosa compilabile
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 15:15   #3
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Ok faccio un esempio semplice sempice al volo:

lib1:
Codice:
class Ecce{};

void functionRunner(void (*func)())
{
	try
	{
		func();
	}
	catch(Ecce & ec)
	{
	}
}

void lanciatore()
{
	throw Ecce();
}
lib2:
Codice:
void function()
{
	lanciatore();
}
runner:
Codice:
int main()
{
	void (*pfunc)() = //carico con dlopen() lib2 e prendo il puntatore a function
	fuctionRunner(pfunc);
}
ho scritto un pò di codice al volo per far capire .... il mio è più lungo e complesso ... ma il flusso è questo ...

il problema è che l'eccezione lanciata da "lanciatore()" nn viene catturata da "functionRunner()" e sale fino a far crashare tutto....
io penso che sia un problema di linking ... lib1 viene collegata a linktime e lib2 caricato a runtime con dlopen() che posso aver sbagliato ?
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 15:23   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Domande:
Stai ovviamente lavorando sotto Windows, giusto?
Sicuro che non sia un crash? La catch(...) ti prende l'eccezione? (nel tuo codice di esempio non c'era).
Ovviamente catch(...) e' sempre da evitare, soprattutto con Visual Studio < 2005, ma e' per sapere.
Cosa ti dice il debugger?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 15:48   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Vista la dlopen direi che sia su Linux O su Windows con gcc.

Ultima modifica di cionci : 01-02-2009 alle 15:54.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 18:20   #6
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
probabilmente la libreria che cerca di catturare il catch é stata compilata con un compilatore diverso, o con una versione diversa dello stesso compilatore, rispetto a quello utilizzato per compilare la libreria che lancia l'eccezione; in sostanza i due meccanismi che gestiscono le eccezioni C++ (quello che lancia e quello che cattura) sono incompatibili. un po' alla lontana lo si potrebbe definire un caso di ABI mismatch, anche se non é proprio ABI.

un'altra ipotesi che mi viene in mente é che tu abbia scritto male il catch: sicuro che il tipo dell'eccezione lanciata corrisponda precisamente a quello dell'eccezione catturata?
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 20:38   #7
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Allora sono sotto linux e uso gcc (se può interessare con codeblocks)
ed il codice che lancia l'eccezione e quello che la cattura sta nella stessa libreria ... quindi compilata con lo stesso compilatore ...

comunque uso solo un compilatore di una versione ...

sicuri che nn è qualche problema di linking ?
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2009, 23:40   #8
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
mi quoto:
Quote:
Originariamente inviato da fero86 Guarda i messaggi
un'altra ipotesi che mi viene in mente é che tu abbia scritto male il catch: sicuro che il tipo dell'eccezione lanciata corrisponda precisamente a quello dell'eccezione catturata?
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 10:35   #9
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
si stessa eccezione provato sia per riferimento( &) sia con la classe vera e propria (ho solo un'eccezione in quella libreria .... e quella ho catturato )
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 10:42   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma se fai un catch in runner l'eccezione viene rilevata correttamente ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 11:10   #11
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
provato ! no nn la cattura!!
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 11:15   #12
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da cionci Guarda i messaggi
Ma se fai un catch in runner l'eccezione viene rilevata correttamente ?
appunto, secondo me no: evidentemente l'eccezione che fa crashare il tutto non é quella lanciata e catturata nel catch, ma un'altra.

@tglman: come fai ad essere sicuro che il processo crasha a causa di quell'eccezione? la causa del crash non potrebbe essere di tipo molto piu classico, ad esempio dereferenziamento di un puntatore nullo? magari proprio nel catch handler?
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 18:07   #13
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
si sicuro sicuro: come da screenshot in allegato ....

e indovinate un pò la mia eccezione si chiama TestFail!!!



come si evince dallo screenshot l'eccezione nn deve far finire il programma ma dovrebbe scrivere ... test fallito per: ecc ecc e continuare
Immagini allegate
File Type: png Screenshot-Untitled Window.png (10.4 KB, 9 visite)
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2009, 20:17   #14
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
in casi come questi io chiudo temporaneamente il progetto su cui sto lavorando e ne creo uno nuovo in cui cerco di riprodurre uno scenario estremamente basilare in cui (non) dovrebbero verificarsi le circostanze di errore; quindi nel tuo caso creerei un sorgente per una libreria dinamica che espone una funzione che lancia e cattura un'eccezione, e un sorgente per un eseguibile che carica la libreria dinamica con dlopen e chiama la funzione.

se si verifica nuovamente l'errore (il processo crasha) segnalalo al team del gcc (e per interesse nostro riporta anche qui i sorgenti e la versione del g++), altrimenti vai aggiungendo man mano pezzi di codice ai nuovi sorgenti finché non ottieni il programma a cui stavi inizialmente lavorando; tipicamente quando faccio cosi non arrivo ad aggiungere due righe che capisco di aver sbagliato io.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 20:53   #15
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
se volete darmi una mano ho messo tutto il progettino su sourceforge lo trovate cercando testframework...

grazie del vostro supporto ... io continuo con i test!!
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2009, 22:50   #16
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Risolto!!

Risoltoooooo!!!!!!

Finalmente ho capito qual'era il problema ....

lib2 era una libreria totalmente c e nn c++ quindi non venivano gestiti i meccanismi per le eccezioni!!!

per compatibilità con librerie nn c++ quindi ho tolto le eccezioni e usato i <setjmp.h> ed adesso funziona tutto correttamente!

grazie comunque a tutti per il supporto!
tglman è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Nuove informazioni sul fallimento del la...
SpaceX: completato parte dell'assemblagg...
Landspace si prepara al secondo lancio d...
Tutti gli sconti Apple su Amazon: tornan...
Altro che entry-level: due smartwatch Am...
Roscosmos ha posticipato (ancora) il lan...
Isar Aerospace si prepara al secondo lan...
Tory Bruno è entrato in Blue Orig...
Fujifilm lancia la cartuccia per archivi...
Dreame H15 Mix: la soluzione 7-in-1 per ...
AirPods Pro 3 in forte sconto su Amazon:...
36 offerte Amazon, molte appena partite:...
2 caricatori multipli eccezionali: da 28...
OLED e 360 Hz a un prezzo senza preceden...
Roborock Q10 S5+ a un prezzo molto conve...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v
Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.