Subject: Re: bug#7190: Crash in menus on w32

From: Lennart Borgman <[email-masked]>
Date: Tue, 19 Oct 2010 02:20:42 +0200

On Tue, Oct 12, 2010 at 9:05 PM, Eli Zaretskii <[email-masked]> wrote:
>> From: Lennart Borgman <[email-masked]>
>> Date: Tue, 12 Oct 2010 11:37:52 +0200
>> Cc: [email-masked]
>>
>> > I didn't mean that you need to remember what you did.  I meant to use
>> > the debugger _when_ it crashes to find out what was the menu in
>> > question.
>>
>> Exactly how do I see that?
>
> By looking at the menu data structures accessed by these functions:
>
>  #7  0x011c4e4b in w32_free_submenu_strings (menu=0x205e3) at w32menu.c:1701
>  #8  0x011c4e5f in w32_free_submenu_strings (menu=0x205f3) at w32menu.c:1706
>  #9  0x011c4e5f in w32_free_submenu_strings (menu=0xdd10145) at w32menu.c:1706
>  #10 0x011c4eaa in w32_free_menu_strings (hwnd=0x900ca) at w32menu.c:1723
>  #11 0x011c2b6e in menubar_selection_callback (f=0x3f63000, client_data=0x2510)
>      at w32menu.c:353
>
> In menubar_selection_callback, you will find that Emacs stores in the
> keyboard buffer a couple of events produced by a menu selection.  If
> my reading of the code is correct, this code:
>
>          entry = AREF (vector, i + MENU_ITEMS_ITEM_VALUE);
>
> retrieves the selected menu item, and `vector' is the entire menu bar,
> computed as
>
>  vector = f->menu_bar_vector;
>
> See frame.h for the structure of this vector.
>
> By looking at `entry' you can find which menu item is being selected.
>
> Then in w32_free_submenu_strings, you can see the same info in its
> bare C form.

I just got a new crash, but unfortunately I have still not understand
how to look at those values. With "bt full" I get this (part of the
bt):

#6  0x7c927573 in ntdll!RtlPcToFileHeader ()
   from C:\WINDOWS\system32\ntdll.dll
No symbol table info available.
#7  0x011c5399 in w32_free_submenu_strings (menu=0x9a05c5) at w32menu.c:1692
        info = {
          cbSize = 44,
          fMask = 52,
          fType = 256,
          fState = 0,
          wID = 0,
          hSubMenu = 0x0,
          hbmpChecked = 0x0,
          hbmpUnchecked = 0x0,
          dwItemData = 8975208,
          dwTypeData = 0x0,
          cch = 0
        }
        i = 6
        num = 17
#8  0x011c53ad in w32_free_submenu_strings (menu=0x5e80611) at w32menu.c:1697
        info = {
          cbSize = 44,
          fMask = 52,
          fType = 0,
          fState = 0,
          wID = 0,
          hSubMenu = 0x9a05c5,
          hbmpChecked = 0x0,
          hbmpUnchecked = 0x0,
          dwItemData = 0,
          dwTypeData = 0x0,
          cch = 10
        }
        i = 10
        num = 30
#9  0x011c53ad in w32_free_submenu_strings (menu=0x464d04eb) at w32menu.c:1697
        info = {
          cbSize = 44,
          fMask = 52,
          fType = 0,
          fState = 0,
          wID = 0,
          hSubMenu = 0x5e80611,
          hbmpChecked = 0x0,
          hbmpUnchecked = 0x0,
          dwItemData = 0,
          dwTypeData = 0x0,
          cch = 4
        }
        i = 5
        num = 10
#10 0x011c53f8 in w32_free_menu_strings (hwnd=0x220048) at w32menu.c:1714
        menu = 0x464d04eb
#11 0x011c311a in menubar_selection_callback (f=0x411dc00, client_data=0x184a)
    at w32menu.c:353
        j = 1
        buf = {
          kind = MENU_BAR_EVENT,
          code = 0,
          part = scroll_bar_above_handle,
          modifiers = 0,
          x = 0,
          y = 0,
          timestamp = 0,
          padding = {0x0, 0x0},
          frame_or_window = 68279301,
          arg = 59691226
        }
        frame = 68279301
        prefix = 59691298
        entry = 59691226
        vector = 92061701
        subprefix_stack = 0x825f00
        submenu_depth = 1
        i = 6218
#12 0x011dcc2c in w32_read_socket (terminal=0x2d04c00, expected=0,
    hold_quit=0x82f6e0) at w32term.c:4623
        inev = {
          kind = NO_EVENT,
          code = 0,
          part = scroll_bar_above_handle,
          modifiers = 0,
          x = 0,
          y = 0,
          timestamp = 0,
          padding = {0x0, 0x0},
          frame_or_window = 0,
          arg = 45484058
        }
        do_help = 0
        count = 0
        check_visibility = 0
        msg = {
          msg = {
            hwnd = 0x220048,
            message = 273,
            wParam = 6218,
            lParam = 0,
            time = 59842578,
            pt = {
              x = 7,
              y = 327687
            }
          },
          dwModifiers = 0,
          rect = {
            left = 545258848,
            top = 2118300673,
            right = 13317672,
            bottom = 0
          }
        }
        f = 0x411dc00
        dpyinfo = 0x14061b0