On Aug 28, 2010, at 1:23 AM, John Ralls wrote: > > On Aug 27, 2010, at 6:18 PM, David Reiser wrote: > >> >> On Aug 26, 2010, at 11:30 PM, John Ralls wrote: >> >>> >>> On Aug 26, 2010, at 8:08 PM, David Reiser wrote: >>> >>>> Using gwen r1983, aqbanking r2095, and gnucash r19465, if I >>>> Use gnucash to get transactions via ofxDC >>>> Then go to Tools>Online Banking Setup and launch the the Aqbanking wizard, >>>> gnucash crashes with the console reading: >>>> >>>> * 12:15:31 WARN <gwenhywfar> inherit.c: 180: Type "5f47140b" not derived >>>> from this base type >>>> Assertion failed: (xgui), function AB_Gui_ReadDialogPrefs, file abgui.c, >>>> line 246. >>>> Abort trap >>>> >>>> and the top of the backtrace: >>>> >>>> Exception Type: EXC_CRASH (SIGABRT) >>>> Exception Codes: 0x0000000000000000, 0x0000000000000000 >>>> Crashed Thread: 0 Dispatch queue: com.apple.main-thread >>>> >>>> Application Specific Information: >>>> Assertion failed: (xgui), function AB_Gui_ReadDialogPrefs, file abgui.c, >>>> line 246. >>>> >>>> >>>> Thread 0 Crashed: Dispatch queue: com.apple.main-thread >>>> 0 libSystem.B.dylib 0x00007fff872913d6 __kill + 10 >>>> 1 libSystem.B.dylib 0x00007fff87331972 abort + 83 >>>> 2 libSystem.B.dylib 0x00007fff8731e9b4 __pthread_markcancel >>>> + 0 >>>> 3 libaqbanking.32.dylib 0x0000000108573cf3 >>>> AB_Gui_ReadDialogPrefs + 196 >>>> 4 libgwenhywfar.59.dylib 0x0000000108af17b1 >>>> GWEN_Gui_ReadDialogPrefs + 86 >>>> 5 libgwenhywfar.59.dylib 0x0000000108aec7de GWEN_Dialog_new + 395 >>>> 6 libaqbanking.32.dylib 0x0000000108578e0a AB_SetupDialog_new + >>>> 46 >>>> 7 libgncmod-aqbanking.dylib 0x00000001080b2c51 >>>> dai_wizard_button_clicked_cb + 266 (druid-ab-initial.c:241) >>>> >>>> On relaunching gnucash, getting into the wizard works, and retrieving >>>> transactions works, but if I again try to open the setup wizard after >>>> having retrieved transactions, I get the same crash. >>>> >>>> Martin thinks that it's related to gnucash still using multiple GWEN_GUI >>>> objects: >>>> "Only one of those objects is derived from AB_GUI, and for reasons unknown >>>> to me at some times a false GUI object is chosen by Gnucash ... I >>>> recommended multiple times to really, really create the GUI object and >>>> init AqBanking once only (!), preferably upon plugin init." >>> >>> So do a debug build and find out for sure. >>> >>> Regards, >>> John Ralls >>> >> Well, I can do the first half of that, but not the second. Can you provide >> some guidance about what to do once the crash drops me into gdb? > > Well, the assert that's causing the trouble is the second one below: > int AB_Gui_ReadDialogPrefs(GWEN_GUI *gui, > > const char *groupName, > > const char *altName, > > GWEN_DB_NODE **pDb) { > > AB_GUI *xgui; > > > assert(gui); > > xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, AB_GUI, gui); > > assert(xgui); > > > if (groupName && *groupName) { > > > Which means that the macro is producing a null result and Martin has wisely > asserted it to prevent a protection crash later. > > Debugging macros is often painful, but in this case it's pretty > straightforward: It's essentially a C++ template that wraps this function in > gwenhywfar/src/base/inherit.c: > > void *GWEN_Inherit_FindData(GWEN_INHERITDATA_LIST *l, > uint32_t id, > int wantCreate){ > GWEN_INHERITDATA *ih; > > assert(l); > > DBG_VERBOUS(GWEN_LOGDOMAIN, > "Searching for inheritance id \"%08x\"", id); > ih=GWEN_InheritData_List_First(l); > while(ih) { > DBG_VERBOUS(GWEN_LOGDOMAIN, > "Checking type \"%s\" (%08x) against %08x", > ih->typeName, ih->id, id); > if (ih->id==id) > return ih->data; > ih=GWEN_InheritData_List_Next(ih); > } /* while */ > if (!wantCreate) { > DBG_WARN(GWEN_LOGDOMAIN, > "Type \"%08x\" not derived from this base type", id); > } > return 0; > } > > Notice that it's looking through a linked list (which is the first parameter) > to find an item with an id that matches the second one. There are two > possible reasons that this would fail: Either the list is empty or it has no > relevant members. You want to find out which it is and tell Martin and > Christian so that they can figure out what went wrong. > > So open the wizard in gdb, but don't run it yet. You need to set two > breakpoints first: > gdb> b abgui.c:245 > ***message about the new breakpoint > gdb> b GWEN_Inherit_FindData > ***message about the new breakpoint > gdb> dis 2 (This turns off the GWEN_Inherit_FindData breakpoint until you're > ready for it) > gdb> r (Run the wizard. Do whatever you did before to make it assert. When it > gets to the first breakpoint, it will stop, tell you about the breakpoint it > hit, and give you a prompt) > gdb> ena 2 (Turn the GWEN_Inherit_FindData breakpoint back on) > gdb> c (resume execution. It will almost immediately stop in the GWEN_Inherit > function with a breakpoint message and a prompt.) > > Now is where the interesting work happens. Step through the code (the "n" > command executes a line, the "s" command steps into a function call, but > there aren't any interesting ones here, so just use n) until you enter the > while loop. (If you don't, then the list is empty and you're done for now.) > Set a watchpoint on id->id: > gdb> watch id->id > This will display the value of id->id on every iteration. Once you get to the > "return 0" statement you can quit gdb (it's OK to kill the running process, > it's just going to assert as soon as the function returns anyway), and copy > gdb's output from your terminal window to an email for Martin and Christian > to digest. > > Regards, > John Ralls
Thank you for the very detailed instructions -- I need that level of guidance. Things looked to be headed in the right direction, but gnucash crashes before I get to the second breakpoint. If I run gnucash once with a successful aqbanking wizard run to 'prime' the label pump, when I set the breakpoints, I get: (gdb) b abgui.c:245 Breakpoint 1 at 0x1062ffc99: file abgui.c, line 245. (gdb) b GWEN_Inherit_FindData Breakpoint 2 at 0x106adf006: file _string.h, line 114. The second breakpoint filename looks a bit weird to me, but I don't have anything else to go on. If I try to set a breakpoint in inherit.c, gdb says there is no such source file. If I leave it as a pending breakpoint, gnucash still crashes before catching the breakpoint -- where the crash is reported at inherit.c:180. The abgui.c breakpoint works fine. Have I done something wrong setting things up? Dave -- David Reiser dbrei...@earthlink.net _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel