设置比纯调试器
在您调试工程之前. 比纯调试器必须首先构建工程.
cd d:\BTR
bd.bat
bd > build d:\test\myproject
bd.exe 读取文件 d:\test\myproject\bdebug.ini, 收集所有参数以进行构建.
bdebug.ini位于何处? 文件 bdebug.ini必须保存在与工程相同目录。
bdebug.ini大致有以下内容:
(1) 焦点代码路径和文件
(2) 调试器的IP地址
(3) 目标文件
(4) 特定语言及属性
(5) 特定调试输出设置
(6) 特定运行设备(如手机、MCU、电路板等)
这些参数在执行build命令时,按提示简单回答就配置好了。很多设置是已设定好的缺省参数,例如比纯调试器与被调试工程在同一PC, 调试器的IP可以设为127.0.0.1。
bd > build d:\test\myproject
(1) 焦点代码、调试器IP、目标文件
(2)VC具体版本号
bd > build /home/user/yourqtprj
(1) 焦点代码、调试器IP、目标文件
(2) QT类型(vcqt gccQt mingwqt , androidqt ,unixqt)
bd > build /home/usr/test/myproject
(1)焦点代码、调试器IP、目标文件
bd > build c:\my_androidstudio\myapp
(1)焦点代码、调试器IP、目标文件
(2)安卓C , 安卓JAVA
android网络组成 , build时ip指定:
android( in AVD )---------------比纯调试器PC
android( 连接wifi )-------------比纯调试器PC
android( 连接以太网 )------------比纯调试器PC
if ( android in AVD ) ip = 10.0.2.2
else if ( android 连接wifi ) ip = 比纯调试器PC ip
else if ( android 连接以太网 ) ip = 比纯调试器PC ip
注意: android-----ADB 线------比纯调试器PC, 这种情况不能调试。
bd > build c:\Wdk8.1\samples\SIOCTL\c++\sys
(1)焦点代码、目标文件
(2)调试输出函数
Windows下的输出函数是OutputDebugString() 或winDbg的其它调试打印输出函数。
linux kernel 包括linux driver , linux module
bd > build /home/usr/mydriver
(1)焦点代码、目标文件
(2)printk 用于输出的调试常数宏(4-7)
bd > build /opt/ubootembed/myuboot
(1)焦点代码、目标文件
bd > build /project/mcu/mymcu
(1)焦点代码、目标文件
(2)调试输出函数
(3)RAM 大小类型(SMALL , MIDDLE, LARGE )
bd > build E:\exer\pyapp
(1)焦点代码、调试器IP、工程命名
bd > build E:\exer\go_src_project
(1) 焦点代码、调试器IP、目标文件
E:\exer\go_src_project下是生成含有调试信息gomain.exe or mygo.lib 工程,构建运行即可
bd > build
E:\exer\phptest
(1)焦点代码、调试器IP、工程命名
E:\exer\phptest下是含有调试信息php工程,运行即可
bd > build
E:\app\nodejs_web
(1)焦点代码、调试器IP、工程命名
E:\app\nodejs_web下是含有调试信息nodejs工程,运行即可
设置Matlab
bd > build E:\exer\matlab_src_project
(1) 焦点代码、调试器IP、目标文件
(2) OS: win , linux , unix , macos or ios
bd > build E:\exer\oc_src_project
(3) 焦点代码、调试器IP、目标文件
(4) OS: macos or ios
bd > build E:\exer\swift_src_project
(1)焦点代码、调试器IP、目标文件
(2)OS: macos or ios
嵌入式是一个泛概念,分散在gcc , driver kernel uboot mcu qt android等分项中,具体请参考相关部分。
bd > build e:\exer\myjava
(1)焦点代码、调试器IP、目标文件
(2)src root 源代码根路径 , class root类文件根路径
如果没有class root, class root 设成与src root 相同值
bd > build e:\exer\mycsharp
(1)焦点代码、调试器IP、目标文件
PV 函数分为P函数与V函数. P函数形如:
handle = pfunc(....);
或者
pointer = pfunc(....);
V 函数形如:
vfunc( handle );
或者
vfunc( pointer );
其中handle句柄是int型( int 或者 short ) , 指针是RAM地址.
PV 函数是资源管理函数, 首先使用资源P函数. 最后使用资源V函数.
( malloc , free ) 是一对c , c++ PV 函数.
pointer = ( PSTRUCT )malloc( size );
free( ( void *)pointer );
Java 和C# PV 函数形如:
handle = pfunc(....);
vfunc( handle );
缺省下, 比纯调试器在任意情况下跟踪( malloc, free ) , ( new , delete )函数. 其它PV函数必须定义在bdebug.ini中.
例如:
文件 bdebug.ini:
[PV_FUNCTION]
( fopen , fclose )
( myopensock , myclosesock )
( AddANode , DelANode )
调试工程时, 使用命令
"pv"查看未释放资源. 比纯调试器视资源句柄handle和指针同为资源.
bd.exe
bd >
bd >pv
一般情况下,用bins命令动态设定断点就够了,但是内核、驱动、单片机、手机等进程不能暂停的情况下,用设定观察点代替设定断点。设定观察点,用插件函数bwp();
…
bwp();
…
设定观察点,进程运行到观察点处,把运行轨迹保存下来供分析。
1) windows driver 必须设定bwp()
2) linux kernel(driver + module) 必须设定bwp()
3) uboot必须设定bwp()
4) MCU单片机必须设定bwp()
5) 手机调试可以不设定bwp(),但断点发生时,进程不暂停,断点转为bwp()处理
6) Nodejs可以不设定bwp(),但断点发生时,进程不暂停,断点转为bwp()处理
VC
1) build 命令失败
问:有时 , 我使用比纯调试器build vc工程失败?
答: 首先请在visual studio工程中rebuild all,成功后 , 您再使用比纯调试器build工程.
2) 栈变量
问:比纯调试器构建VC的程序,可以看堆栈吗?
答:可以,vmap命令可以察看VC , GCC 等C进程全部堆和栈变量。vlog命令可以看某个变量的变化历史。
GCC
1) VM gcc 与windows 比纯调试器
问: gcc 在VM里, BD 安装在VM里,如何调试?
答: 比纯调试器也安装在VM里,在VM里调试gcc工程,与在windows一样方便
Java
1) classpath
问: 我的java工程,无class root path,如何同时建立src root 与class root?
答: 设置成src root == class root即可。学习idea 和eclipse , java src 和构建结果分开是好习惯。
C#
1) 32位
, 64位
问: 比纯调试器和.net pc 是不同PC,它们CPU位数(32位 64位) 不同怎么办
答: 比纯调试器是64位,c#是32位,能正常调试,不影响调试,
2) C# sliverlight
问: 比纯调试器构建的C#能在sliverlight里运行吗?
答: 能
PV 函数
1) 错误的pv函数
问:error_num = fopen_s( &fstream ,
fname , "wb" ); ( fopen_s fclose)是pv函数吗?
答: (fopen_s,fclose)函数对不是pv函数, 由于error_num不是资源handle句柄或者pointer指针.
不过您可以转换fopen_s( ... )为pv函数. 例如:
FILE *CConvert::myfopen( const char *fname , const char *mode )
{
FILE *fstream ;
errrno_t error_num;
error_num = fopen_s(
&fstream , fname , 模式 );
if ( !error_num )
fstream = NULL;
return fstream;
}
之后, ( myfopen , fclose ) 就是一对pv函数了.
2) ( malloc , free ) , (
new , delete )
问: 在bdebug.ini中,我增加( malloc , free )为[PV_FUNCTION]函数对, 正确否?
答: 您不应增加 ( malloc , free ) , ( new ,
delete )在bdebug.ini中. 比纯调试器已经缺省视之为pv 函数了. 顺便告之, ram指针pv函数只适用C工程中,Java 、 c# 仅支持整数型handle资源pv函数.
命令
1) build 非常慢
问: 我使用比纯调试器build命令调试我的工程, 为什么无[file][no]定位信息?
答: 由于您的工程太大,但你的比纯调试器是免费版本,该问题在比纯调试器企业版本根本不存在。
2) build lib project
问: A工程调用B库工程,B库工程用比纯构建而A工程不用,为何会出错?
答: 手动构建B库,然后用比纯调试器构建B库,然后用比纯调试器构建A,会一切正常。