Hi,
bin grad auf ein merkwürdiges Phänomen gestoßen. Ich versuche derzeit
einen DLNA-Client, den es bisher nur als Gtk+ Programm gibt als Console
umzustricken zwecks späterer Verwendung auf einem Beagle Bone Black.
In diesem code
1 | static void
|
2 | append_media_server (GUPnPDeviceProxy *proxy)
|
3 | {
|
4 | GUPnPDeviceInfo *info;
|
5 | GUPnPServiceProxy *content_dir;
|
6 | char *friendly_name;
|
7 |
|
8 |
|
9 | info = GUPNP_DEVICE_INFO (proxy);
|
10 |
|
11 | content_dir = get_content_dir (proxy);
|
12 | friendly_name = gupnp_device_info_get_friendly_name (info);
|
13 |
|
14 | if ( (friendly_name != NULL) && (content_dir != NULL)) {
|
15 | GList *child;
|
16 |
|
17 | g_list_append(MediaServers,proxy);
|
18 |
|
19 | g_free (friendly_name);
|
20 |
|
21 | /* Append the embedded devices */
|
22 | child = gupnp_device_info_list_devices (info);
|
23 | while (child) {
|
24 | append_media_server(GUPNP_DEVICE_PROXY (child->data));
|
25 |
|
26 | g_object_unref (child->data);
|
27 | child = g_list_delete_link (child, child);
|
28 | }
|
habe ich etwas sehr merkwürdiges beobachtet. Lasse ich die
Optimierungseinstellungen der Compiler auf -o2, bekomme ich für
"friendly_name" keine vernünftigen Werte (Überprüft im Debugger).
Schalte ich die Optimierung aus, bekomme ich lesbare Namen.
Füge ich bei eingeschalteter Optimierung die Zeile
1 | cout << friendly_name << endl;
|
hinter gupnp_device_info_get_friendly_name ein, bekomme ich auch
ordentliche Werte. Kann mir einer erklären warum? Auch ohne die Ausgabe
wird friendly_name ja in der if Abrage benutzt, sollte daher ja auch
nicht wegoptimiert werden.