VC_调试

本文介绍VC2008中的两种实用调试技巧:一是如何设置条件断点监视变量状态变化;二是如何进行多线程调试,包括线程的发现、标记、调试及切换。

[VC2008]

1,条件断点

        --比如要监视   bool   bUpdate = false;  什么时候  bUpdate == true;

        1,首先在  bool   bUpdate = false;  处设置断点;

        2,Alt + F9打开断点管理窗口;

        3,找到刚才设置的断点,右键  -〉 "Condition..."

        4,设置条件  "bUpdate == true"

2,多线程调试
       1.1,发现和标记线程
               --右键-> Debug ,  Debug Location  两个工具条
               --发现Thread: Debug工具条  ->  Show Threads in source  (找到线程后会在右边空白处显示  "波浪线");
               --标记Thread: 右键("波浪线") -> 标记Thread(给线程命名,便于查找)
       1.2,调试和切换Thread
               --使用Debug Location工具栏在正被调试的进程和这些进程中的线程之间进行切换
               --也可以在Threads窗口(Debug菜单、Windows、Threads)里管理线程
       1.3,中断基于调用线程的代码行
              --设置一个断点并选择断点筛选器
              --可以选择基于线程ID或者它的名称中断

<think> 我们需要修改这个SQL语句,使其能够独立运行(不依赖特定表的特定数据),并且能够进行测试。 原SQL是一个MyBatis的映射文件中的查询,它关联了两个表(tqs_zhzjls和tqs_zhztdy),并且有一些子查询。 为了测试,我们可以创建一个临时的测试表,并插入一些测试数据,然后运行这个SQL。 但是,用户要求的是“改成能测试的sql”,意思可能是提供一个可以独立运行的测试SQL脚本,包括建表和插入测试数据,然后执行查询。 然而,考虑到这是一个查询语句,我们也可以简化:提供创建两个表的语句,并插入少量测试数据,然后运行这个查询。 但是,请注意,原查询中使用了子查询(从tqs_zhxx表中获取账户名称),但在这个查询中并没有关联tqs_zhxx表,而是通过子查询的方式关联。而我们的测试数据中并没有tqs_zhxx表,所以我们需要同时创建这个表并插入数据。 步骤: 1. 创建三个表:tqs_zhzjls, tqs_zhztdy, tqs_zhxx 2. 向每个表插入一些测试数据,确保查询能返回结果。 3. 执行查询语句。 注意:原查询中的条件:a.vc_hklb in ('1054','1060','1071','9011','9012','9013','1079') 和 b.l_zhlx=102 我们设计测试数据时,要确保满足这些条件,这样查询才会有结果。 由于用户没有提供表结构,我们需要根据查询语句中涉及的字段来推断表结构,并创建测试表。 根据查询语句,我们推断表结构如下: tqs_zhzjls (表a) 的字段: vc_cpdm: 基金代码(字符串) vc_hklb: 款项类别(字符串) d_rq: 日期(日期类型) en_je: 金额(数字类型) vc_bfzh: 付款账号(字符串) vc_dsfzh: 收款账号(字符串) vc_szhh: ? 根据条件,与表b关联(字符串) tqs_zhztdy (表b) 的字段: vc_zh: 账号(字符串)? 但是条件中用的是b.vc_zh,而关联条件是a.vc_szhh = b.vc_zh vc_cpdm: 基金代码(字符串) l_zhlx: 账户类型(整数) tqs_zhxx (表) 的字段: vc_zh: 账号(字符串) vc_zhmc: 账户名称(字符串) 但是注意,在子查询中,我们使用了两个子查询: (select vc_zhmc from tqs_zhxx where vc_zh = a.vc_bfzh) payerName (select vc_zhmc from tqs_zhxx where vc_zh = a.vc_dsfzh) payeeName 因此,我们需要在tqs_zhxx表中插入测试账号,以便子查询能够获取到账户名称。 下面我们构建测试脚本: 注意:由于原查询使用了Oracle的TO_CHAR函数,我们假设数据库是Oracle。因此,我们使用Oracle的语法。 如果用户需要在其他数据库测试,可能需要调整,但问题没有说明,我们按Oracle处理。 测试脚本如下: </think> ### 可测试的SQL修改方案 ```sql -- 步骤1: 创建模拟测试表 CREATE TABLE tqs_zhzjls ( vc_cpdm VARCHAR2(20), vc_hklb VARCHAR2(10), d_rq DATE, en_je NUMBER(18,2), vc_bfzh VARCHAR2(30), vc_dsfzh VARCHAR2(30), vc_szhh VARCHAR2(30) ); CREATE TABLE tqs_zhztdy ( vc_zh VARCHAR2(30), vc_cpdm VARCHAR2(20), l_zhlx NUMBER(5) ); CREATE TABLE tqs_zhxx ( vc_zh VARCHAR2(30) PRIMARY KEY, vc_zhmc VARCHAR2(100) ); -- 步骤2: 插入测试数据 INSERT INTO tqs_zhxx (vc_zh, vc_zhmc) VALUES ('PAYER001', '付款账户A'); INSERT INTO tqs_zhxx (vc_zh, vc_zhmc) VALUES ('PAYER002', '付款账户B'); INSERT INTO tqs_zhxx (vc_zh, vc_zhmc) VALUES ('PAYEE001', '收款账户X'); INSERT INTO tqs_zhztdy (vc_zh, vc_cpdm, l_zhlx) VALUES ('ACC001', 'FUND001', 102); INSERT INTO tqs_zhztdy (vc_zh, vc_cpdm, l_zhlx) VALUES ('ACC002', 'FUND002', 102); INSERT INTO tqs_zhzjls (vc_cpdm, vc_hklb, d_rq, en_je, vc_bfzh, vc_dsfzh, vc_szhh) VALUES ('FUND001', '1054', DATE '2023-01-15', 5000.00, 'PAYER001', 'PAYEE001', 'ACC001'); INSERT INTO tqs_zhzjls (vc_cpdm, vc_hklb, d_rq, en_je, vc_bfzh, vc_dsfzh, vc_szhh) VALUES ('FUND002', '1060', DATE '2023-02-20', 7500.50, 'PAYER002', 'PAYEE001', 'ACC002'); -- 步骤3: 执行可测试的查询 SELECT DISTINCT a.vc_cpdm AS fundCode, a.vc_hklb AS feeType, TO_CHAR(a.d_rq, 'yyyy-mm-dd') AS payDate, a.en_je AS payBalance, a.vc_bfzh AS payerNumber, (SELECT vc_zhmc FROM tqs_zhxx WHERE vc_zh = a.vc_bfzh) AS payerName, a.vc_dsfzh AS payeeNumber, (SELECT vc_zhmc FROM tqs_zhxx WHERE vc_zh = a.vc_dsfzh) AS payeeName FROM tqs_zhzjls a JOIN tqs_zhztdy b ON a.vc_szhh = b.vc_zh AND a.vc_cpdm = b.vc_cpdm WHERE a.vc_hklb IN ('1054','1060','1071','9011','9012','9013','1079') AND b.l_zhlx = 102; -- 步骤4: 清理测试环境 (实际测试时不执行) /* DROP TABLE tqs_zhzjls; DROP TABLE tqs_zhztdy; DROP TABLE tqs_zhxx; */ ``` ### 测试结果说明 1. **预期返回2行记录**:对应插入的两条测试数据 2. **关键字段验证**: - `payerName` 应显示 "付款账户A" 和 "付款账户B" - `payeeName` 应显示 "收款账户X" - `feeType` 值应为 '1054' 或 '1060' 3. **过滤条件验证**: - 只返回 `l_zhlx=102` 且 `vc_hklb` 在指定列表中的记录 ### 调试技巧 1. 分步验证子查询: ```sql -- 验证账户名称查询 SELECT vc_zhmc FROM tqs_zhxx WHERE vc_zh = 'PAYER001'; ``` 2. 检查连接条件: ```sql -- 检查关联关系 SELECT COUNT(*) FROM tqs_zhzjls a JOIN tqs_zhztdy b ON a.vc_szhh = b.vc_zh; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值