设置
在您调试工程之前. 比纯调试器必须首先编译工程.
cd d:\BTR
bd.exe
bd > F2
bd > build d:\test\myproject
bd.exe 读取文件 d:\test\myproject\bdebug.ini, 收集所有参数以进行编译.
几乎所有参数从VS复制, 或者LINUX下从makefile复制.
bdebug.ini位于何处 ? 文件 bdebug.ini必须保存在与工程相同目录
您可没有任何设置下调试vc工程:
bd > build d:\test\myproject
如果您的工程没有语法错误 . 比纯调试器将编译成功.
设置 gcc (LINUX下)
您可以调试g++ ,gcc 工程且之前不需任何设置.
bd > build \home\usr\test\myproject
如果您的工程没有语法错误 . 比纯调试器将编译成功.
如果您的[MAKE_CLEAN_COMMAND] 不是 "make clean" 或者 [MAKE_COMMAND] 不是 "make" 。 以下参数必须设置在bdebug.ini中.
[MAKE_CLEAN_COMMAND]
make clean
<--- 您的make clean可能make clear , make empty ,...
[MAKE_COMMAND]
make
<--- 您的make可能make install , make all , make menu ,...
bdebug.ini与makefile相同目录。LINUX下 , gcc可能是cc、g++. bd.exe需要[MAKE_CLEAN_COMMAND] 和 [MAKE_COMMAND]. 此二项缺一不可.
Makefile例子:
TEST_OBJS = ./test/test1.o
TEST_OBJS += ./test/alist.o
MAIN_OBJS = ./main/main.o ./main/init/init.o
HANDLE_OBJS = ./handle/hd.o
OBJS = $(TEST_OBJS) $(MAIN_OBJS) $(HANDLE_OBJS)
TARGET = Release/test.exe
CC = g++
CXXFLAGS = -Wall -O -g
LIBFLAG = -lpthread
%.o : %.cpp
$(CC) $(CXXFLAGS) -c $< -o $@
$(TARGET) : $(OBJS)
$(CC) $(CXXFLAGS) $(LIBFLAG) $^ -o $@
clean:
rm -rf test/*.o
rm -rf main/*.o
rm -rf main/init/*.o
rm -rf Release/*.exe
怎样编译java工程? javac.exe 产生 *.class files.怎样打包java obj files? jar.exe 打包产生 *.jar , *.war , *.ear.
bd.exe使用shell编译java. shell文件必须手动产生. shell文件命令组成如下:
( 1 )javac
( 2 )jar
( 3 )copy(cp)
( 4 )del(rm) ( 5 )cd
( 6 )rem(#)
在 shell中 javac.exe编译JAVA之后, 您最好不要删除 *.class *.jar *.ear *.war.
shell与bdebug.ini目录相同. 以下参数可能在bdebug.ini中设置.
[JAVA_SHELL]
......
[JAVA_PKGMAP]
......
[JAVA_SHELL] 指定java shell文件名. [JAVA_PKGMAP] 指定path映射. *.java源代码文件路径与*.class路径映射. *.java源代码文件路径与 *.class路径相同 , [JAVA_PKGMAP]可为空.
例子1 ( application in win ):
make.bat:
cd top
del xxx\*.class
del main\*.class
del *.jar
javac xxx\subc.java
javac main\hello.java
jar cvfm f1.jar manifest.mf xxx\subc.class main\hello.class
cd ..
bdebug.ini:
[JAVA_SHELL]
make.bat
[JAVA_PKGMAP]
cd d:\BTR
bd.exe
bd >F2
bd >build E:\tool\JAVA_PRJ\App1
例子2 ( servlet in win ):
make.bat :
cd ..\servlet\src
javac TestServlet.java
copy TestServlet.class ..\test\WEB-INF\classes\.
cd ..
jar -cvf test.war test
copy test.war C:\tomcat\apache-tomcat-6.0.14\webapps\.
bdebug.ini:
[JAVA_SHELL]
make.bat
[JAVA_PKGMAP]
E:\JAVA_PRJ\servlet\src : E:\JAVA_PRJ\servlet\test\WEB-INF\classes
cd d:\BTR
bd.exe
bd >F2
bd >build E:\tool\JAVA_PRJ\servlet
C#只有一项参数设置在bdebug.ini中:
[C#_COMPILE_COMMAND]
......
C#_COMPILE_COMMAND]设置有参数来自vc#输出窗口:
当c#重编译所有工程杨功 , 编译参数行便如上所示.
[C#_COMPILE_COMMAND] 参数行通常很长, 大约2000-4000字符长度. 您不应拆分参数行为多行,切记!
例如:
[C#_COMPILE_COMMAND]
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:17......
最后编译: build E:\BTR\demo\win\cs
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:
[MAKE_CLEAN_COMMAND]
make clean
[MAKE_COMMAND]
make
[PV_函数]
( fopen , fclose )
( myopensock , myclosesock )
( AddANode , DelANode )
调试工程时, 使用命令 "pv"查看未释放资源. 比纯调试器视资源句柄handle和指针同为资源.
bd.exe
bd >F2
bd >pv
问与答
VC
1) build 命令失败
问:有时 , 我使用比纯调试器build vc工程失败?
答: 首先请在visual studio工程中rebuild all,成功后 , 您再使用比纯调试器build工程.
GCC
1) make clean
问: 我的makefile没有make clean, 我该怎么办 ?
答: 增加 make clean 在makefile中. bdebug.ini需要make clean . [MAKE_CLEAN_COMMAND] param 不能 be empty. 您 can learn from 比纯调试器 demo.
2) make command
问:我的make命令在makefile中只一行 ,正确否?
答: 一行命令形如: "gcc hello.c -o hello.out" 此处不正确. 请拆分为多行. 怎么拆成多行请参照比纯调试器demo例子.
3) KDE makefile
问:有时我发现比纯调试器编译KDE后,KDE makefile make clean命令将导致错误. 为什么?
答: 比纯调试器编译KDE makefile , makefile执行以下步骤:
./configure
make clean
make
make distclean
当make clean 导致错误,再次 make distclean就不会出错了。
4) -lrt -lpthread
问: 比纯调试器 built libtest.a成功. 之后我使用库libtest.a在其它makefileproejct, 但是make出错误. 为什么 ?
A; 比纯调试器插入time函数和thread函数在库libtest.a中 , 因此-lpthread 、 -lrt 参数应该追加在您的调用makefile中.
Java
1) make.bat 或者 make.sh
问: 我的make.bat可以编译我的java工程, 但是比纯调试器不能. 为什么?
答: 由于del命令出现在make.bat文件中部 , 有时比纯调试器不能发现*.class 文件. 因此比纯调试器报告错误. 正确方法是 :
del file1
del filen
javac ...
javac ...
copy ...
..
cd path
javac ...
javac ...
copy ...
jar ...
del ...
C#
1) [C#_COMPILE_COMMAND]
问: 我拆分[C#_COMPILE_COMMAND]为多行,因为太长了, 正确否?
答: 不正确 , 虽然[C#_COMPILE_COMMAND]参数3000-5000字节长, 但是您一个字节也不能改变或者拆分它们.
2) [C#_COMPILE_COMMAND]
问: 我不能发现[C#_COMPILE_COMMAND]需要的参数?
答: 抱歉 , 当前版本只支持c#在VISUAL STUDIO 2008.net中. VISUAL STUDIO 2010.net不能支持, 我们将纠正之.
PV
函数1) 错误的pv函数
问:error_num = fopen_s( &fstream , fname , "wb" ); fopen_s是pv函数吗?
答: fopen_s( ... ) 不是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) 命令无响应
问: 我使用"flash" command , 比纯调试器无响应 , 为什么?
答: 您应首先输入F2热键, 让比纯调试器处于暂停模式 ,该模式下您输入比纯调试器命令就能响应了. 不过命令执行之后, 您应按F3热键进入继续运行模式 .