lv1=ide lv2= type=jy
IDE 调试 dbg
〖经验 debug〗
typedefvoid (*PTest)(HWNDmainWnd);
PTest(null);--可以编译通过.但导致不能调试
i:\wke\wke_1.0\Source\WebCore\bindings\js\JSMainThreadExecState.h 不能进入-重编ok
调试 构造函数
line159表示进入了构造函数,但在执行如何语句之前会调用基类/初始化列表的构造函数.即到达160断点前还可以有其他断点.
openprj: openexeanddebugit
调试 c#
test111depon MyControl,虽然mycontrol没有加载到当前sln中,但仍然可以正常编译调试.
core.dll can't be debug: 先确保在编辑mycontrol的sln中可以调试,确定使用的dll&pdb,copy到使用的项目再试
pdb
pdb中记录的路径为绝对路径.
.lib中记录了.pdb的绝对路径,默认为vc90.pdb,可以修改.
在链接.lib时linker先确定文件名,如vc80.pdb,会在lib的同级目录下或lib中记录的绝对路径中寻找,如果找不到则报以下warning:
1>libjpeg.lib(jcprepct.obj) : warning LNK4099: 未找到PDBvc80.pdb(使用K:\chrome\chrome8_2\src\chrome\Debug\lib\libjpeg.lib或在K:\chrome\chrome8_2\src\third_party\WebKit\vs2008\Debug_Cairo_CFLite\vc80.pdb中寻找);正在链接对象,如同没有调试信息一样
pdb如果不能load,删除.suo,重启ide
pdb输出name:c++>输出文件>程序数据库文件名
pdb load
从msserver上下载后再次调试还是不能找到pdb:查看器搜索路径,eg:
C:\Windows\SysWOW64\wkernel32.pdb: Cannot find or open the PDB file.
I:\work\wke\wkernel32.pdb: Cannot find or open the PDB file.
E:\Symbols_ms\symbols\dll\wkernel32.pdb: Cannot find or open the PDB file.
将其copy到某个搜索路径即可.
---------------------------------
让Visual Studio载入Symbol(pdb)文件
http://blog.csdn.net/xt_xiaotian/archive/2010/03/16/5384111.aspx
e:\symbols
[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
---------------------------------
pdbload的可能输出:
'TestCMain.exe': Loaded 'X:\project\cpp\TestDll\Debug\TestCMain.exe', Symbols loaded.
'TestCMain.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Symbols loaded (source information stripped).
'TestCMain.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Symbols loaded (source information stripped).
'TestCMain.exe': Loaded 'X:\project\cpp\TestDll\Debug\TestDll.dll', Symbols loaded.
test_shell.exe: 已加载R:\VCall.dll,未使用调试信息生成二进制文件。seebelow
---------------------------------
test_shell.exe: 已加载R:\VCall.dll,未使用调试信息生成二进制文件。
1>zbase.lib(mem.obj) : warning LNK4075: 忽略/EDITANDCONTINUE(由于/INCREMENTAL:NO规范)
vs2005 未使用调试信息生成二进制文件 解决
首先打开菜单 项目->项目属性页
1。选择 配置属性->链接器->调试->生成调试信息 改为 是
2。选择 配置属性->C/C++ ->常规->调试信息格式 改为 用于编辑并继续的程序数据库(/ZI)
3。选择 配置属性->C/C++ ->优化->优化 改为 禁用(/Od)
engversion:
1 项目属性,configuration properties->linker->Generate Debug Info 从 no 改为 yes
2 项目属性,configuration properties->c/c++->debug information format为/ZI
3 项目属性,configuration properties->c/c++->optimization为Disabled
项目属性从lib改为dll,也能导致不生pdb.
确定应该加载的pdb和相应的文件
lib中记录了pdb的绝对路径,而pdb中又记录了文件的绝对路径,所以使用编译好的lib容易造成调试的文件不是当前项目中的文件.
确定可以dbg? no, wke.pdb没有加载,dll加载的断点需要此pdb,而不是exe的pdb
加载符号太慢
test_shell.dll 加载符号太慢: test_shell2.pdb--renamebigpdbs.
删除suo文件(可能由于禁用disable is造成)
release 调试
以及去掉优化.
dll 调试
项目设置:(Debugging),设置command, arg, workingdir(即为快捷方式中的起始位置)
Q:\es0.6\bin\java.exe
-Xms64m -Xmx256m -Dfile.encoding=GB2312 -verbose:gc -cp log4j-1.2.8.jar;js.jar;bsh-2.0b4.jar;. zmyth.xlib.Start start.dat
Q:\es0.6
bin\df.exe
-Xss2m -Xms128m -Xmx512m -Dfile.encoding=GB2312 -verbose:gc -cp . zmyth.xlib.Start data/start.dat tcp://122.11.61.155:8610 0.80.06131 a!b
L:\东方故事--0.8版本_2
C# - cpp dll调试:
还有clrsupport
确认C# 项目引用了cpp项目
最后再rebuild
CppUtil, zbase, compresslib 需要一起加载,才能保证rebuildall通过.
watcher 窗口
5,wm
@err,hr
data,5
断点:在函数处中断
http://msdn.microsoft.com/zh-cn/library/k7xkk3e2(v=vs.80).aspx
类函数副本不一致
全局函数的定义不要写在.h中,但是类的函数却可以〖cpp basic knowledge〗
see X:\project\win32\ExpmtWin32 v280 (需要两个lib项目)
ClassMethonTest.h:
classClassMethodTest
{
public:
ClassMethodTest(inta)
{
printf("in ClassMethodTest's ctor(), a = %d\n", a);
}
voidUsedBy1()
{
printf("Used by 1\n");
}
voidUsedBy2()
{
printf("Used by 2\n");
}
};
ExpmtWin32Lib.vcproj(lib1) & ExpmtWin32Lib2.vcproj(lib2)同时依赖于ClassMethonTest.h,lib1使用了ctor&UsedBy1, lib2使用了ctor&UsedBy2
lib1并没有导出类ClassMethodTest的所有的method:
lib1导出(记为ABC):
??0ClassMethodTest@@QAE@H@Z
??_C@_0CF@CGOPMNOL@in?5ClassMethodTest?8s?5ctor?$CI?$CJ?0?5a?5?$DN@
?UsedBy1@ClassMethodTest@@QAEXXZ
lib2导出(记为A2B2D2):
??0ClassMethodTest@@QAE@H@Z
??_C@_0CF@CGOPMNOL@in?5ClassMethodTest?8s?5ctor?$CI?$CJ?0?5a?5?$DN@
?UsedBy2@ClassMethodTest@@QAEXXZ
正常情况下A=A2,B=B2,并且都指向同一个.h文件
现在只编译lib1,不编译lib2,链接之后为:ABC,D2被使用了,但D2所要求的.h文件已经被修改,因此D2无法调试/设置断点
这种情况下两个lib导出了相同的符号但却不会报链接错误...
HTMLToken.h 被多个cpp文件包含,但修改之后只有部分cpp编译文件被(同一个项目也能造成部分可调式的情形):
html\parser\CSSPreloadScanner.cpp(35):#include "HTMLToken.h"
html\parser\HTMLConstructionSite.cpp(41):#include "HTMLToken.h"
html\parser\HTMLTokenizer.cpp(32):#include "HTMLToken.h"
html\parser\HTMLTreeBuilder.cpp(43):#include "HTMLToken.h"
html\HTMLViewSourceDocument.cpp(41):#include "HTMLToken.h"