Community
Participate
Working Groups
My debugger stopped working when I stepped out of a fn. I wonder if CDT is getting confused by a tailjump.... [1,101,388,634,748] &"step\n" [1,101,388,634,988] ~"Current language: auto; currently c++\n" [1,101,388,634,988] 7931^done,reason="end-stepping-range",thread-id="0",frame={addr="0x01049550",fun\ c="_GLOBAL__I.49000__ZN17cyg_io_init_classC1Ev_cygdrive_c_cdtworkspace_ecos_repository_ecos_packages\ _io_common_current_src_ioinit.cxxqhvkhb",args=[],file="/cygdrive/c/cdtworkspace/ecos-repository/ecos\ /packages/io/common/current/src/ioinit.cxx",line="65"} [1,101,388,634,988] (gdb) [1,101,388,634,988] 7932 info threads [1,101,388,634,998] &"info threads\n" [1,101,388,634,998] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,388,634,998] &"\n" [1,101,388,634,998] 7932^done [1,101,388,634,998] (gdb) [1,101,388,634,998] 7933-stack-info-depth [1,101,388,635,128] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,388,635,128] 7933^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,388,635,128] (gdb) [1,101,388,635,138] 7933-stack-info-depth [1,101,388,635,138] 7934-var-update var10 [1,101,388,635,138] 7933^done,depth="4" [1,101,388,635,138] (gdb) [1,101,388,635,198] 7934^done,changelist={} [1,101,388,635,198] (gdb)
Arggghhh.... I believe the problem is specific to gdb 6.2.1 $ ~/gdbbuild/install/bin/arm-elf-gdb -v GNU gdb 6.2.1 With this GDB, it works. $ arm-elf-gdb -v GNU gdb 5.3 (eCosCentric)
My older GDB crashes when I try to view registers in CDT. !"¤&#"&"#¤& :-)
Choose between two broken GDB's....
In retrospect I think the error message from GDB should be reviewed. Broken GDB's are not going away. Øyvind
Created attachment 16165 [details] This log contains something that is quite possibly a real CDT bug These exceptions where generated when debugging the same problem, but this particular exception isn't easily reproduceable. java.lang.NullPointerException at org.eclipse.cdt.debug.internal.core.model.CExpression.getExpressionText(CExpression.java:58) at org.eclipse.cdt.debug.internal.core.model.CExpression.getExpressionString(CExpression.java:163) at org.eclipse.cdt.debug.internal.core.model.AbstractCValue.evaluateAsExpression(AbstractCValue.java:48) at org.eclipse.cdt.debug.internal.ui.CValueDetailProvider$1.run(CValueDetailProvider.java:41) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:106) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2749) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2434) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.core.launcher.Main.basicRun(Main.java:183) at org.eclipse.core.launcher.Main.run(Main.java:644) at org.eclipse.core.launcher.Main.main(Main.java:628)
I've verified that GDB is temporarly unable to parse the stackframe. As soon as I step out of the fn, GDB resumes normal operation. Index: Thread.java =================================================================== RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Thread.java,v retrieving revision 1.12 diff -u -r1.12 Thread.java --- Thread.java 18 Nov 2004 16:07:54 -0000 1.12 +++ Thread.java 26 Nov 2004 13:59:38 -0000 @@ -181,7 +181,12 @@ } } } catch (MIException e) { - throw new MI2CDIException(e); + // FIX!!! by commenting out the line below, I was able to show + // that although GDB freaks out on the corrupt stack frame, the + // GDB debug session recovers as soon as we step out of the + // area. + // throw new MI2CDIException(e); + stackdepth=0; } finally { target.setCurrentThread(currentThread, false); }
> These exceptions where generated when debugging the same problem, but this > particular exception isn't easily reproduceable. > java.lang.NullPointerException at > org.eclipse.cdt.debug.internal.core.model.CExpression.getExpressionText(CExpression.java:58) Oyvind ... please do not do that ... i.e. do not mixed PR(issues) It makes it very hard for us to follow and come up with a valid fix. The NPE should been a new PR, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=79678
> I've verified that GDB is temporarly unable to parse the stackframe. > As soon as I step out of the fn, GDB resumes normal operation. Why is this patch needed, If you look at the code carefully in Thread.getStackFrameCount(). When the first try fails we try a second time and decrement the depth by one ignoring the corrupt frame, Question why it does not work for you ? Are we looking at the right code/bug ? Why stackdepth = 0 ? you may have other valid frames in the thread
>Why is this patch needed, Just to clarify. The diff is not patch. It is just some tweaks I did in order to prove that GDB recovered from this temporary condition. Øyvind
>Oyvind ... please do not do that ... i.e. do not mixed PR(issues) I'll try. The problem is that I need to distinguish between writing up problems as I find them, and diving into them as time permits. Bugzilla does not have a "REPORTING IN PROGRESS" flag. Its not pretty, but forking off PR's have served us so far. Øyvind
> Just to clarify. The diff is not patch. > It is just some tweaks I did in order to prove that GDB recovered from this > temporary condition. Understood, but the question remains. Why the scheme that we have in Thread.getStackFrameCount() does not work for you ? If the first try failed, we retry a second time and decrement the stackdepth by one to ignore the corrupt frame. And according to your own trace, it appears to be working. So why did you have to add another catch clause ?
More info: - Here is the stack trace *before* I add a watch expression on p[0] 3 cyg_hal_invoke_constructors() at c:\cdtworkspace\ecos-repository\ecos\packages\hal\arm\arch\current\src\hal_misc.c:201 2 start() 1 start() - add watch expression on on p[0] - step around the application for a bit - the debug session is frozen as in step3.jpg(i.e. step is unavailable) - issuing "stepi" in the GDB console enough times enventually brings GDB/CDT back to a working state again.
Created attachment 16229 [details] Log The error in the log appeared shortly before CDT reentered a working state
Created attachment 16230 [details] Shows CDT GUI before trouble begins
Created attachment 16231 [details] shows debugger after watch expression has been added Works as expected
Created attachment 16232 [details] After issuing step a couple of times w/p[0] watch expression It is no longer possible to step. stepi/step into the GDB console still works
Read this log from the bottom and up. It is untrimmed... :-) [1,101,818,422,527] (gdb) [1,101,818,422,547] 942^done,depth="9" [1,101,818,422,547] (gdb) [1,101,818,423,168] 943 stepi [1,101,818,423,178] &"stepi\n" [1,101,818,423,228] 943^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d1420",func\ ="Cyg_CList_T",args=[{name="this",value="0xf9fc"}],file="clist.hxx",line="310"} [1,101,818,423,228] (gdb) [1,101,818,423,228] 944 info threads [1,101,818,423,238] &"info threads\n" [1,101,818,423,248] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,423,248] &"\n" [1,101,818,423,258] 944^done [1,101,818,423,258] (gdb) [1,101,818,423,258] 945-stack-info-depth [1,101,818,423,548] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,423,548] 945^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,423,548] (gdb) [1,101,818,423,548] 945-stack-info-depth [1,101,818,423,548] 946-var-update var1 [1,101,818,423,568] 945^done,depth="9" [1,101,818,423,568] (gdb) [1,101,818,423,799] 946^done,changelist={} [1,101,818,423,799] (gdb) [1,101,818,423,799] 947-var-update var2 [1,101,818,424,029] 947^done,changelist={} [1,101,818,424,029] (gdb) [1,101,818,424,029] 948-data-list-changed-registers [1,101,818,424,039] 948^done,changed-registers=["13","15"] [1,101,818,424,039] (gdb) [1,101,818,424,049] 949-stack-info-depth [1,101,818,424,159] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,424,159] 949^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,424,159] 949-stack-info-depth [1,101,818,424,179] (gdb) [1,101,818,424,189] 949^done,depth="9" [1,101,818,424,189] (gdb) [1,101,818,424,580] 950 stepi [1,101,818,424,590] &"stepi\n" [1,101,818,424,650] 950^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d1424",func\ ="Cyg_CList_T",args=[{name="this",value="0x10d0f90"}],file="clist.hxx",line="310"} [1,101,818,424,650] (gdb) [1,101,818,424,650] 951 info threads [1,101,818,424,650] &"info threads\n" [1,101,818,424,650] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,424,650] &"\n" [1,101,818,424,660] 951^done [1,101,818,424,660] (gdb) [1,101,818,424,660] 952-stack-info-depth [1,101,818,424,970] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,424,970] 952^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,424,970] (gdb) [1,101,818,424,970] 952-stack-info-depth [1,101,818,424,970] 953-var-update var1 [1,101,818,424,980] 952^done,depth="9" [1,101,818,424,980] (gdb) [1,101,818,425,231] 953^done,changelist={} [1,101,818,425,231] (gdb) [1,101,818,425,231] 954 stepi [1,101,818,425,231] 955-var-update var2 [1,101,818,425,241] &"stepi\n" [1,101,818,425,301] 954^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d1428",func\ ="Cyg_CList_T",args=[{name="this",value="0x10d0f90"}],file="clist.hxx",line="310"} [1,101,818,425,301] (gdb) [1,101,818,425,551] 955^done,changelist={} [1,101,818,425,551] (gdb) [1,101,818,425,551] 956-data-list-changed-registers [1,101,818,425,561] 956^done,changed-registers=["11","13","15"] [1,101,818,425,561] (gdb) [1,101,818,425,571] 957-stack-info-depth [1,101,818,425,671] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,425,681] 957^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,425,681] (gdb) [1,101,818,425,681] 957-stack-info-depth [1,101,818,425,701] 957^done,depth="9" [1,101,818,425,701] (gdb) [1,101,818,425,711] 958 stepi [1,101,818,425,771] &"stepi\n" [1,101,818,425,841] 958^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d142c",func\ ="Cyg_CList_T",args=[{name="this",value="0xf9fc"}],file="clist.hxx",line="310"} [1,101,818,425,841] (gdb) [1,101,818,425,841] 959 info threads [1,101,818,425,851] &"info threads\n" [1,101,818,425,851] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,425,851] &"\n" [1,101,818,425,861] 959^done [1,101,818,425,861] (gdb) [1,101,818,425,861] 960-stack-info-depth [1,101,818,426,152] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,426,152] 960^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,426,152] (gdb) [1,101,818,426,152] 960-stack-info-depth [1,101,818,426,152] 961-var-update var1 [1,101,818,426,162] 960^done,depth="9" [1,101,818,426,162] (gdb) [1,101,818,426,412] 961^done,changelist={} [1,101,818,426,412] (gdb) [1,101,818,426,412] 962-var-update var2 [1,101,818,426,643] 962^done,changelist={} [1,101,818,426,643] (gdb) [1,101,818,426,643] 963-data-list-changed-registers [1,101,818,426,653] 963^done,changed-registers=["15"] [1,101,818,426,653] (gdb) [1,101,818,426,663] 964-stack-info-depth [1,101,818,426,773] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,426,773] 964^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,426,773] (gdb) [1,101,818,426,773] 964-stack-info-depth [1,101,818,426,803] 964^done,depth="9" [1,101,818,426,803] (gdb) [1,101,818,431,590] 965-interpreter-exec console stepistepi [1,101,818,431,590] &"Undefined command: \"stepistepi\". Try \"help\".\n" [1,101,818,431,590] 965^error,msg="Undefined command: \"stepistepi\". Try \"help\"." [1,101,818,431,600] (gdb) [1,101,818,432,581] 966 stepi [1,101,818,432,591] &"stepi\n" [1,101,818,432,661] 966^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d1430",func\ ="Cyg_CList_T",args=[{name="this",value="0xf9fc"}],file="clist.hxx",line="310"} [1,101,818,432,671] (gdb) [1,101,818,432,671] 967 info threads [1,101,818,432,671] &"info threads\n" [1,101,818,432,671] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,432,671] &"\n" [1,101,818,432,681] 967^done [1,101,818,432,681] (gdb) [1,101,818,432,681] 968-stack-info-depth [1,101,818,432,972] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,432,972] 968^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,432,972] (gdb) [1,101,818,432,972] 968-stack-info-depth [1,101,818,432,972] 969-var-update var1 [1,101,818,432,982] 968^done,depth="9" [1,101,818,432,982] (gdb) [1,101,818,433,242] 969^done,changelist={} [1,101,818,433,242] (gdb) [1,101,818,433,242] 970-var-update var2 [1,101,818,433,482] 970^done,changelist={} [1,101,818,433,482] (gdb) [1,101,818,433,482] 971-data-list-changed-registers [1,101,818,433,482] 971^done,changed-registers=["15"] [1,101,818,433,482] (gdb) [1,101,818,433,492] 972-stack-info-depth [1,101,818,433,603] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,433,603] 972^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,433,603] 972-stack-info-depth [1,101,818,433,613] (gdb) [1,101,818,433,633] 972^done,depth="9" [1,101,818,433,633] (gdb) [1,101,818,433,703] 973 stepi [1,101,818,433,713] &"stepi\n" [1,101,818,433,793] 973^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d1434",func\ ="Cyg_CList_T",args=[{name="this",value="0xf9fc"}],file="clist.hxx",line="310"} [1,101,818,433,793] (gdb) [1,101,818,433,793] 974 info threads [1,101,818,433,803] &"info threads\n" [1,101,818,433,813] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,433,813] &"\n" [1,101,818,433,813] 974^done [1,101,818,433,813] (gdb) [1,101,818,433,813] 975-stack-info-depth [1,101,818,434,113] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,434,113] 975^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,434,113] (gdb) [1,101,818,434,113] 975-stack-info-depth [1,101,818,434,113] 976-var-update var1 [1,101,818,434,123] 975^done,depth="9" [1,101,818,434,123] (gdb) [1,101,818,434,374] 976^done,changelist={} [1,101,818,434,374] (gdb) [1,101,818,434,374] 977-var-update var2 [1,101,818,434,634] 977^done,changelist={} [1,101,818,434,634] (gdb) [1,101,818,434,634] 978-data-list-changed-registers [1,101,818,434,634] 978^done,changed-registers=["3","15"] [1,101,818,434,634] (gdb) [1,101,818,434,644] 979-stack-info-depth [1,101,818,434,754] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,434,754] 979^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,434,754] 979-stack-info-depth [1,101,818,434,774] (gdb) [1,101,818,434,784] 980 stepi [1,101,818,434,794] 979^done,depth="9" [1,101,818,434,794] (gdb) [1,101,818,434,794] 981 info threads [1,101,818,434,794] &"stepi\n" [1,101,818,434,874] 980^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d1438",func\ ="Cyg_CList_T",args=[{name="this",value="0xf9fc"}],file="clist.hxx",line="310"} [1,101,818,434,874] (gdb) [1,101,818,434,874] &"info threads\n" [1,101,818,434,874] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,434,874] &"\n" [1,101,818,434,884] 981^done [1,101,818,434,884] (gdb) [1,101,818,434,884] 982-stack-info-depth [1,101,818,435,195] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,435,195] 982^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,435,195] (gdb) [1,101,818,435,195] 983 stepi [1,101,818,435,195] 982-stack-info-depth [1,101,818,435,295] &"stepi\n" [1,101,818,435,335] 983^done,reason="end-stepping-range",thread-id="0",frame={addr="0x010d0f80",func\ ="Cyg_CList",args=[{name="this",value="0xf9fc"}],file="clist.hxx",line="164"} [1,101,818,435,335] (gdb) [1,101,818,435,335] 984 info threads [1,101,818,435,656] &"Previous frame identical to this frame (corrupt stack?)\n" [1,101,818,435,656] 982^error,msg="Previous frame identical to this frame (corrupt stack?)" [1,101,818,435,656] (gdb) [1,101,818,435,666] &"info threads\n" [1,101,818,435,666] &"warning: RMT ERROR : failed to get remote thread list\n" [1,101,818,435,666] &"\n" [1,101,818,435,666] 984^done [1,101,818,435,666] (gdb) [1,101,818,435,666] 985-stack-info-depth [1,101,818,435,676] 985^done,depth="10" [1,101,818,435,676] (gdb) [1,101,818,435,676] 986-stack-list-frames 0 10 [1,101,818,435,686] 986^done,stack=[frame={level="0",addr="0x010d0f80",func="Cyg_CList",file="clist.\ hxx",line="164"},frame={level="1",addr="0x010d143c",func="Cyg_CList_T",file="clist.hxx",line="310"},\ frame={level="2",addr="0x010d1410",func="Cyg_ThreadQueue_Implementation",file="mlqueue.hxx",line="12\ 6"},frame={level="3",addr="0x010d1364",func="Cyg_ThreadQueue",file="/cygdrive/c/cdtworkspace/ecos-re\ pository/ecos/packages/kernel/current/src/sync/cnt_sem.cxx",line="73"},frame={level="4",addr="0x0105\ a73c",func="Cyg_Condition_Variable",file="/cygdrive/c/cdtworkspace/ecos-repository/ecos/packages/ker\ nel/current/src/sync/mutex.cxx",line="540"},frame={level="5",addr="0x010771f0",func="__static_initia\ lization_and_destruction_0",file="/cygdrive/c/cdtworkspace/ecos-repository/ecos/packages/io/fileio/c\ urrent/src/select.cxx",line="100"},frame={level="6",addr="0x01077268",func="_GLOBAL__I.50000_cyg_tim\ eval_to_ticks",file="/cygdrive/c/cdtworkspace/ecos-repository/ecos/packages/io/fileio/current/src/se\ lect.cxx",line="453"},frame={level="7",addr="0x0105332c",func="cyg_hal_invoke_constructors",file="/c\ ygdrive/c/cdtworkspace/ecos-repository/ecos/packages/hal/arm/arch/current/src/hal_misc.c",line="202"\ },frame={level="8",addr="0x01030230",func="start"},frame={level="9",addr="0x01030230",func="start"}] [1,101,818,435,686] (gdb) [1,101,818,435,686] 987-var-update var1 [1,101,818,435,966] 987^done,changelist={} [1,101,818,435,966] (gdb) [1,101,818,435,966] 988-var-update var2 [1,101,818,436,216] 988^done,changelist={} [1,101,818,436,216] (gdb) [1,101,818,436,216] 989-data-list-changed-registers [1,101,818,436,216] 989^done,changed-registers=["14","15"] [1,101,818,436,216] (gdb)