[comp.windows.ms] SDK / CVW question

lrb@hpfcso.HP.COM (Larry Bruns) (12/01/90)

How do you get CVW to show symbolic info for Windows internal routines?
Of course I realize there is no copy of the source to see.  I just would
like to see the publicly-known labels (of the Windows routines) displayed.

In the SDK "Tools" Manual, Section 7.3.2, it states in the 3rd or 4th
paragraph how to do this.  I followed directions exactly, but it refuses
to load the symbols for the KRNL286.EXE or KRNL386.EXE files - giving me
an "Access Denied" error message, apparently due to the fact that Windows
locks all access (even read access) to its executable files at startup
time.

Thanks for any tips,
Larry Bruns

PS - I hear that Microsoft is "considering" adding On-Line telephone
support for the SDK.  But no word as to when.

poffen@sj.ate.slb.com (Russ Poffenberger) (12/04/90)

In article <7450002@hpfcso.HP.COM> lrb@hpfcso.HP.COM (Larry Bruns) writes:
>How do you get CVW to show symbolic info for Windows internal routines?
>Of course I realize there is no copy of the source to see.  I just would
>like to see the publicly-known labels (of the Windows routines) displayed.
>
>In the SDK "Tools" Manual, Section 7.3.2, it states in the 3rd or 4th
>paragraph how to do this.  I followed directions exactly, but it refuses
>to load the symbols for the KRNL286.EXE or KRNL386.EXE files - giving me
>an "Access Denied" error message, apparently due to the fact that Windows
>locks all access (even read access) to its executable files at startup
>time.
>
>Thanks for any tips,
>Larry Bruns
>

Do you have the debugging version of windows installed? (Using the .BAT file
n2d?)

Russ Poffenberger               DOMAIN: poffen@sj.ate.slb.com
Schlumberger Technologies       UUCP:   {uunet,decwrl,amdahl}!sjsca4!poffen
1601 Technology Drive		CIS:	72401,276
San Jose, Ca. 95110             (408)437-5254

lrb@hpfcso.HP.COM (Larry Bruns) (12/08/90)

Well, I got an answer to my question from the Microsoft On-Line support
people.  I will post it here in case anyone else is interested:

-When I installed Windows, it added the "share" command into my AUTOEXEC.BAT,
 (or maybe it just asked me to add it - I don't remember which).  When WIN3.0
 starts up, it locks KRNL386.EXE (even for read access), thus also locking
 away all the debug information I need!  The solution was to *NOT* do the
 call to share.exe, thus preventing Windows from locking access to the file 
 and so enabling CVW to open it later to read the debugging symbols out of it.
 I also gave CVW the names of the GDI.EXE and USER.EXE DLL's, and was able to
 see all the symbols I wanted.

Other CVW tips I have gleaned from hard experience:

-When debugging a DLL w/ symbolic info in it (made by using MASM's /ZI option,
 CL's /Zi option, and LINK's /CO option), I didn't see any of my DLL's symbols 
 when bringing up (under CVW) an application that invoked the DLL.  Even when
 I stepped through the code into the DLL, I could not see any of my routine 
 names.  The solution I discovered was:
  -Bring up CVW.
  -Have it invoke your Windows app (the one that uses the DLL).
  -Enter the name of your DLL at the CVW startup prompt that asks for any
   DLL's or other executables w/ debug info.
  -Run thru the app, or at least far enough into it so that the DLL code is
   invoked at least once.
  -Completely exit the app and CVW.
  -Run CVW a second time, again entering the name of your app and the DLL.
   (Also enter KRNL{23}86, GDI and USER at the startup prompts to see names of
   all Windows routines that you call).
  -You should now be able to see the names of all your symbols, even before 
   starting the run through your app, 

-To see any symbols at all, you need to check the "Show Symbolic Names" box
 in the CVW "Option" / "Source Window" menu.  (Also, make sure you have the
 debugging versions of KRNL{23}86.EXE, GDI.EXE and USER.EXE installed).

-When a source window is open and you want to have the window show a
 particular routine which has a known sybolic name, you will find that the
 "Search" menu's "Label" option no longer works in finding a label!  I used
 to use this all the time in CodeView 5.1 (for DOS that is, not Windows) to
 go to any label/function/procedure name, whether it was in a C or an ASM
 module.  But now in CVW, I could only get it to find labels in C code for
 which I *also* had all of the source code loaded.  I discovered that Micro-
 soft had broken this for their CodeView-for-DOS 6.0 release as well.  This
 does not make any sense to me - why can I *see* my public label right there 
 in the code window, but yet not be able to tell it to *go* there?  I called
 their support line (for CV 6.0, of course, since there is no phone support 
 for CVW yet), and they could verify that it was indeed broken, but could
 not give me any help other than that.  After a lot of frustration due to
 having to continuously use the Page Up/Down keys for moving around in the
 code, I finally found the solution myself:  There is a command you can
 type in from the command window - the "v" command - which will move the
 window to the labeled routine that you want to see.  Example:  v LOADICON
 (BTW: you don't have to use the caps if you turn off the "Case Sensitivity"
 option in the Options menu).

-I have a Windows app that prints logging info directly to the CRT (thus 
 bypassing Windows and overwriting parts of my Windows display).  It looks 
 messy but shows me what I need.  When I run that same app under CVW, the
 logging info is printed in what looks like Greek!  The solution was to
 run my app once (puts Greek on the screen), then start up a background 
 DOS partition and immediately hot-key from it back to Windows.  Now when
 I run my app a second time, it looks fine.  I have no idea why this works.
 (However, this solution only works in 286 mode).

Larry Bruns