Title: | Digital Ladebug debugger |
Moderator: | TLE::LUCIA |
Created: | Fri Feb 28 1992 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 969 |
Total number of notes: | 3959 |
This is a regression between 4.0-30 and 4.0-33. With shared objects, an external variable (whose type is a BLISS type, I think) is no longer visible in a C++ file. Unfortunately, I cannot narrow this down to a simple test case to post here. To reproduce this problem, debug a copy of the V6.0 C++ compiler and stop in a C++ file -- stop in the function "walk_scope()". Trying to examine the variable "gem_db_g_debug" works for 4.0-30, but not for 4.0-33. Note that if you move to the scope of a C file, the type becomes visible. This should wait until somebody in the ladebug group gets VMS proxies set up so that they can use a compiler out of our build tree. Talk to Bevin for details. Here's a command playback file to use: ========================================================================= stop in walk_scope run tmp.cxx # In a C++ file p gem_db_g_debug # Get to a C file up ; up ; up ; up p gem_db_g_debug ========================================================================= Working version: Welcome to the Ladebug Debugger Version 4.0-30 ------------------ object file name: /usr/users/mjhans/cpri/exxalphaosf/bl36/exe/exx Reading symbolic information ...done (ladebug) stop in walk_scope [#1: stop in void walk_scope(a_scope_ptr) ] (ladebug) run tmp.cxx [1] stopped at [void walk_scope(a_scope_ptr):255 0x6ff9e510] 255 walk_scope_pragmas (scope); (ladebug) p gem_db_g_debug 335674744 (ladebug) up ; up ; up ; up >1 0x6ff9e3b8 in me_driver(module_result={ ... }) /usr/users/mjhans/cpri/src/edg-meg/me.cxx:204 204 walk_scope(il_header.primary_scope); >2 0x6ffcb50c in dec_exx_back_end_one_o_file(object_file_fcb=0x0) /usr/users/mjhans/cpri/src/edg-dcg/compile.cxx:1389 1389 me_driver(module_il); >3 0x6ffcad04 in dec_exx_back_end() /usr/users/mjhans/cpri/src/edg-dcg/compile.cxx:1127 1127 dec_exx_back_end_one_o_file( >4 0x6fe27fe4 in edg_main(argc=2, argv=0x11fff2e0="\210T\374o 7\370\177\020-\370\177") /usr/users/mjhans/cpri/src/edg-src/cfe.c:136 136 dec_exx_back_end(); (ladebug) p gem_db_g_debug 335674744 ========================================================================= Non-working version: Welcome to the Ladebug Debugger Version 4.0-33 ------------------ object file name: /usr/users/mjhans/cpri/exxalphaosf/bl36/exe/exx Reading symbolic information ...done (ladebug) stop in walk_scope [#1: stop in void walk_scope(a_scope_ptr) ] (ladebug) run tmp.cxx [1] stopped at [void walk_scope(a_scope_ptr):255 0x6ff9e510] 255 walk_scope_pragmas (scope); (ladebug) p gem_db_g_debug Symbol gem_db_g_debug not visible in current scope. Error: no value for gem_db_g_debug (ladebug) up ; up ; up ; up >1 0x6ff9e3b8 in me_driver(module_result=class { ... }) /usr/users/mjhans/cpri/src/edg-meg/me.cxx:204 204 walk_scope(il_header.primary_scope); >2 0x6ffcb50c in dec_exx_back_end_one_o_file(object_file_fcb=0x0) /usr/users/mjhans/cpri/src/edg-dcg/compile.cxx:1389 1389 me_driver(module_il); >3 0x6ffcad04 in dec_exx_back_end() /usr/users/mjhans/cpri/src/edg-dcg/compile.cxx:1127 1127 dec_exx_back_end_one_o_file( >4 0x6fe27fe4 in edg_main(argc=2, argv=0x11fff2e0="\210T\374o 7\370\177\020-\370\177") /usr/users/mjhans/cpri/src/edg-src/cfe.c:136 136 dec_exx_back_end(); (ladebug) p gem_db_g_debug 335674744 - Matt
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
899.1 | Which compiler? | TLE::MERRITT | Steve Merritt, Ladebug Team | Wed Mar 26 1997 15:34 | 11 |
Which compiler did you use when trying out the Ladebug 4.0-30? Were both tests done using the new compiler, or an older one? I ask because we saw a similar occurrance between C & C++ when a variable was declared extern C. In this case we no longer had symbolic info in the C++ file for this variable (and ladebug currently doesn't search for symbols cross language boundaries well). -Steve | |||||
899.2 | CXXC::MJHANS | Matthew Hanselman, DEC C/C++ | Wed Mar 26 1997 16:04 | 4 | |
This is with an older compiler, V5.5-010. I'll try poking around a little more and see if I can figure out anything else more useful. - Matt | |||||
899.3 | TLE::LUCIA | http://asaab.zko.dec.com/~lucia/biography.html | Wed Mar 26 1997 17:44 | 4 | |
Can you post or e-mail me the output of stdump on your binary | grep problem-sybol ? I've made some changes with dynamic symbols recently... | |||||
899.4 | As much as I can get... | CXXC::MJHANS | Matthew Hanselman, DEC C/C++ | Thu Mar 27 1997 09:38 | 25 |
The executable is made up of 6 shared objects, and "gem_db_g_debug" is seen in only one of of those objects (libgem.so): % stdump libgem.so | grep gem_db_g_debug 3659. (file 105) (0x7ffd8758) gem_db_g_debug Global Bss [ 1] int The 'C' declaration of gem_db_g_debug is: typedef struct GEM_TX_FILE GEM_TX_FILE; extern GEM_TX_FILE* gem_db_g_debug; And C++ is: class GEM_TX_FILE; extern "C" { extern GEM_TX_FILE* gem_db_g_debug; } You can see "gem_db_g_debug" while in another shared object if it is a C file, but not C++ -- even when both of these files are in the same shared object. But I can't make this happen by hand..... - Matt | |||||
899.5 | TLE::LUCIA | http://asaab.zko.dec.com/~lucia/biography.html | Thu Mar 27 1997 17:24 | 3 | |
From what I can see, it is not the recent changes I was thinking of. Tim | |||||
899.6 | Added to tracking list | TLE::MERRITT | Steve Merritt, Ladebug Team | Thu Apr 03 1997 11:27 | 2 |
I've added this problem to the C++ tracking list. | |||||
899.7 | Fixed? | CXXC::MJHANS | Matthew Hanselman, DEC C/C++ | Mon May 05 1997 11:56 | 4 |
This problem (at least, the case in question) appears to have been fixed in ladebug 4.0-36. - Matt |