pr_warning("Failed to get the type of %s.\n", varname);
                return -ENOENT;
        }
-       pr_debug2("Var real type: (%x)\n", (unsigned)dwarf_dieoffset(&type));
+       pr_debug2("Var real type: %s (%x)\n", dwarf_diename(&type),
+                 (unsigned)dwarf_dieoffset(&type));
        tag = dwarf_tag(&type);
 
        if (field->name[0] == '[' &&
            (tag == DW_TAG_array_type || tag == DW_TAG_pointer_type)) {
-               if (field->next)
-                       /* Save original type for next field */
-                       memcpy(die_mem, &type, sizeof(*die_mem));
+               /* Save original type for next field or type */
+               memcpy(die_mem, &type, sizeof(*die_mem));
                /* Get the type of this array */
                if (die_get_real_type(&type, &type) == NULL) {
                        pr_warning("Failed to get the type of %s.\n", varname);
                        return -ENOENT;
                }
-               pr_debug2("Array real type: (%x)\n",
+               pr_debug2("Array real type: %s (%x)\n", dwarf_diename(&type),
                         (unsigned)dwarf_dieoffset(&type));
                if (tag == DW_TAG_pointer_type) {
                        ref = zalloc(sizeof(struct probe_trace_arg_ref));
                                *ref_ptr = ref;
                }
                ref->offset += dwarf_bytesize(&type) * field->index;
-               if (!field->next)
-                       /* Save vr_die for converting types */
-                       memcpy(die_mem, vr_die, sizeof(*die_mem));
                goto next;
        } else if (tag == DW_TAG_pointer_type) {
                /* Check the pointer and dereference */