无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
5401#
 楼主| 发表于 2013-4-12 16:08:22 | 只看该作者
2010qaqz111 发表于 2013-4-12 12:19
410-01版的MSTR貌似又出问题了,MSTR &&DRV= 1  7  1  1073774080  41878638080  2097215  42952412160  C: ...

PECMD2012.1.77.1-130410-02.多窗口线程孵化版_win32_64.sfx.zip:

1> REGI    **16   支持16进制数,不必0x前缀 。 (@或#均适用)

2> REGI  **0  KEYPATH\!     //清除键,自己还留着

3> REGI  **0  KEYPATH\=     //建立一空键

4》 MSTR 和 LPOS** 及 LPOS*** 的 -delims:参数支持转义 \n \r \t \v \f \b

5> MSTR &&DRV=<8>...             MSTR &&DRV=<-1> ...
回复

使用道具 举报

5402#
发表于 2013-4-12 17:55:56 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 18:05 编辑
mdyblog 发表于 2013-4-12 16:08
PECMD2012.1.77.1-130410-02.多窗口线程孵化版_win32_64.sfx.zip:

1> REGI    **16   支持16进制数,不 ...


谢谢!16进制方便很多了!

REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
                              \ 55 56 77
                              \ 78 99 99
这种写法生成的键值仍然还有问题,红颜色的两个字节掉了。



对了还有 REGI **0 的说明,在注册表里看到像文件夹一样的,M$的官方名称叫做“项”,非文件夹图标的叫做“值名称”,但是习惯上称为“键”,数据叫做“值”。

说明信息中的:
┃    │    │**16  配合@#数据为16进制。**0配合!清空该值;配合=为建立空                               ┃

建议改为:
┃    │    │**16  配合@#数据为16进制。**0配合!清空该项下的键(不清除默认值);配合=为建立空                               ┃
回复

使用道具 举报

5403#
 楼主| 发表于 2013-4-12 18:14:21 | 只看该作者
2010qaqz111 发表于 2013-4-12 17:55
谢谢!16进制方便很多了!

REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
  1. <FONT face=宋体>REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
  2.                               \ 55 56 77
  3.                               \ 78 99 99
  4. 这种写法生成的键值仍然还有问题,红颜色的两个字节掉了。</FONT>
复制代码
\ 后面至少2个空格,一个是排版空格, 一个数据间空格。
REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
                             \        55 56 77
                             \        78 99 99



回复

使用道具 举报

5404#
发表于 2013-4-12 19:02:06 | 只看该作者
2个空格正常了,看来是换行直接被忽略掉了,这回没有问题了,谢谢!
回复

使用道具 举报

5405#
发表于 2013-4-12 19:14:01 | 只看该作者
mdyblog, you can pack PECMD2012 with .RAR or .7z.
I use Windows ENG UnPack Zip is Error FONT (Windows CHINESE UnPack, use WINRAR PACK is OK)
回复

使用道具 举报

5406#
 楼主| 发表于 2013-4-12 19:19:35 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 19:46 编辑
2010qaqz111 发表于 2013-4-12 17:55
谢谢!16进制方便很多了!

REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20


**0 你需要什么言的功能?
目前 **0!:
  删除其下面的 子项和值。不清除  自己的默认数据。

而REG  delete /va  值删除 其下的值,并清除  自己的默认数据; 但 不删除其下的子项。

干脆全都删除:值, 子项, 默认值
回复

使用道具 举报

5407#
发表于 2013-4-12 19:22:03 | 只看该作者
磁盘扇区的十六进制也改成这样0x55AAFFDD这样的吧。原来的那个太费眼,也不好写。
回复

使用道具 举报

5408#
 楼主| 发表于 2013-4-12 19:42:41 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 19:43 编辑
2011Tduy09 发表于 2013-4-12 19:14
mdyblog, you can pack PECMD2012 with .RAR or .7z.
I use Windows ENG UnPack Zip is Error FONT (Windo ...


后缀改为RAR, 用WINRAR 解开即可。
不改后缀,先运行WINRAR, 再打开 该文件包。 也可。
回复

使用道具 举报

5409#
 楼主| 发表于 2013-4-12 19:47:15 | 只看该作者
freesoft00 发表于 2013-4-12 19:22
磁盘扇区的十六进制也改成这样0x55AAFFDD这样的吧。原来的那个太费眼,也不好写。

????说什么啊? 没没明白。
回复

使用道具 举报

5410#
发表于 2013-4-12 20:28:23 | 只看该作者
2010qaqz111 发表于 2013-4-12 07:45
REGI 命令的一些问题:

这样写也是可以的REGI HKLM\SYSTEM\123\A1=@ 0x99 0x12 0x74 0x33 0x99 0x13 0x62 0x74 0x99 0x14 0x34 0x94 0x99 0x15 0x52 0x37
回复

使用道具 举报

5411#
发表于 2013-4-12 20:32:52 | 只看该作者
真不明白你们为什么把十六进制注册表的手写写得那么复杂
回复

使用道具 举报

5412#
 楼主| 发表于 2013-4-12 20:38:48 | 只看该作者
2011hwo1 发表于 2013-4-12 20:28
这样写也是可以的REGI HKLM\SYSTEM\123\A1=@ 0x99 0x12 0x74 0x33 0x99 0x13 0x62 0x74 0x99 0x14 0x34 0 ...

可以的。 原有的写法都支持。
回复

使用道具 举报

5413#
 楼主| 发表于 2013-4-12 20:39:31 | 只看该作者
2011hwo1 发表于 2013-4-12 20:32
真不明白你们为什么把十六进制注册表的手写写得那么复杂

呵呵。 是啊! 我也纳闷。
回复

使用道具 举报

5414#
发表于 2013-4-12 20:40:03 | 只看该作者
十六进制注册表的数据一般不会手写吧,都是reg转来的,只是以前要加0x前缀经常整得很多编辑器一行都显示不完要强制换行。
回复

使用道具 举报

5415#
发表于 2013-4-12 20:43:57 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 21:06 编辑
mdyblog 发表于 2013-4-12 19:19
**0 你需要什么言的功能?
目前 **0!:
  删除其下面的 子项和值。不清除  自己的默认数据。


要不加个掩码开关吧:
REGI **0:dev XXXX\XXXX\!

d表示默认值(default)
e表示项(entry)
v表示值键(value key)

有哪个删哪个,缺省跟 reg delete /va 一致,或者缺省三种全清除。掩码不一定用dev,用123或者特殊的字符也行。
回复

使用道具 举报

5416#
 楼主| 发表于 2013-4-12 21:19:04 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 21:22 编辑
2010qaqz111 发表于 2013-4-12 20:43
要不加个掩码开关吧:
REGI **0:dev XXXX\XXXX\!


已改。
可以分成子项**0:数字N, 1清默认值 2删所有值 4删所有子项。可以多个**0:N,数字可合并(如5)。

**0:1   清默认值
**0:2   删所有值
**0:4   删所有子项
**0      删除所有  ( **0:7也是)

可以 regi   **0:1   **0:4   ...
可以 regi   **0:5     ...
回复

使用道具 举报

5417#
发表于 2013-4-12 22:39:56 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 22:50 编辑

LOGS 输出是命令运行完之后才输出到日志的吧,没有文件名行号函数名辅助定位看起来实在太吃力了,尤其是嵌套的CALL和FIND IFEX的调用,看到好多行之后才发现进了 IFEX FIND 的某个分支或者进了某个 CALL 或者 LOAD,又返回去看分支条件。。。
多线程CALL的脚本不知道哪里有问题,时行时不行,想看LOG找问题在哪,可看起来太吃力了,能否考虑把LOG输出加上文件名、行号、当前函数名来做辅助定位?

另外 PECMD 在解释脚本的时候应该还维护有一个变量层级的状态量,进入一个{}或者CALL一个函数或者LOAD一个文件都会有相应变化,而且这个状态量应该是和变量生存期有关,这个状态量能否也输出到LOG?用来判断是否进入代码块和变量有效范围。
回复

使用道具 举报

5418#
发表于 2013-4-12 22:43:41 | 只看该作者
mdyblog 发表于 2013-4-12 21:19
已改。
可以分成子项**0:数字N, 1清默认值 2删所有值 4删所有子项。可以多个**0:N,数字可合并(如5)。 ...

这样就比 reg delete 强了,也更灵活了。
回复

使用道具 举报

5419#
 楼主| 发表于 2013-4-12 23:08:16 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 23:32 编辑
2010qaqz111 发表于 2013-4-12 22:39
LOGS 输出是命令运行完之后才输出到日志的吧,没有文件名行号函数名辅助定位看起来实在太吃力了,尤其是嵌套 ...


要输出命令结果,只能等到执行完毕再打印LOG。
适可而止吧。毕竟 LOGS不是关键。别花太多的精力。
要做完善,得单独做一个debuger。

要行号文件名 函数名 ,可以
插入 SET &=DEBUG 行号 文件名 函数名   信息 。。。

SET &=DEBUG  10  信息 1
.。。。
SET &=DEBUG  20  信息 2
.。。。
SET &=DEBUG  26  信息 3


多线程LOGS。可以写个脚本,根据线程号坼成一个一个的小LOG

》》还维护有一个变量层级的状态量
不用。 C++些的,不用, C++代劳了。
回复

使用道具 举报

5420#
发表于 2013-4-12 23:18:48 | 只看该作者
mdyblog 发表于 2013-4-12 23:08
要输出命令结果,只能等到执行完毕再打印LOG。
适可而止吧。毕竟 LOGS不是关键。别花太多的精力。
要做 ...

好的,我另外想办法查错吧。扯到多线的东西就是恼火,调试查错太麻烦了。
回复

使用道具 举报

5421#
发表于 2013-4-12 23:38:51 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 23:40 编辑
mdyblog 发表于 2013-4-12 23:08
SET &=DEBUG  10  信息 1
.。。。
SET &=DEBUG  20  信息 2
.。。。
SET &=DEBUG  26  信息 3

哦,这是手动插入信息到LOG,这个可以有,试试。


拆线程脚本倒是不用那么麻烦,因为有线程号,用 excel 的筛选就可以析出某个特定线程的 LOG 了,配合手动插入信息应该会好点。
回复

使用道具 举报

5422#
 楼主| 发表于 2013-4-12 23:40:10 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 23:41 编辑
2010qaqz111 发表于 2013-4-12 23:18
好的,我另外想办法查错吧。扯到多线的东西就是恼火,调试查错太麻烦了。


多线程调试想来是件麻烦事。 多线程程序保证正确也是麻烦事。 C、C++也是如此。
多线程 少出错的一法是:多用SENDMSG。
子线程 只用(读或写)自己专属的变量。
凡是 涉及共享的变量, 都SENDMSG到主线程, 数据交互都集中在 主线程。 这样利用消息队列自己的固有的同步机制, 会少出很多错误。
这样不用单独考虑线程同步。


SET-swap  效率很高。 不管多大的变量, 瞬间完成交换。
回复

使用道具 举报

5423#
发表于 2013-4-12 23:45:16 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 23:47 编辑
mdyblog 发表于 2013-4-12 23:40
多线程调试想来是件麻烦事。 多线程程序保证正确也是麻烦事。 C、C++也是如此。
多线程 少出错的一法是: ...


目前遇到的多线引起的不确定发生错误都不是共享变量引起的,因为我只是用多线开独立的任务,有等待我都是用文件系统建立空文件同步这种方式来做的,间隔等待查询的尺度也很大(WAIT 500),这种方式在运行完之后会在磁盘上留下痕迹,可以做一些辅助的判断。

现在遇到的两个疑似的问题是,主线早已设置到的PE变量,在子线程有时候会解释成空串;另一个就是 THREAD* 开出的线程根本就不起来。
回复

使用道具 举报

5424#
 楼主| 发表于 2013-4-12 23:49:13 | 只看该作者
2010qaqz111 发表于 2013-4-12 23:38
哦,这是手动插入信息到LOG,这个可以有,试试。

可以写一个脚本, 在WCS脚本中自动加入
SET &=AUTO_DEBUG  行号  文件名
这样LOGS中就有行号信息了。
完毕, 再自动去掉这些行。
回复

使用道具 举报

5425#
发表于 2013-4-12 23:54:44 | 只看该作者
mdyblog 发表于 2013-4-12 23:49
可以写一个脚本, 在WCS脚本中自动加入
SET &=AUTO_DEBUG  行号  文件名
这样LOGS中就有行号信息了。  ...

隔行插一条?算了还是手动吧,在关键的地方放一些就是了,自动的遇到带{}拆行的 FIND IFEX 和 \ 并行的语句貌似会出问题。
回复

使用道具 举报

5426#
 楼主| 发表于 2013-4-12 23:57:35 | 只看该作者
本帖最后由 mdyblog 于 2013-4-13 00:02 编辑
2010qaqz111 发表于 2013-4-12 23:45
目前遇到的多线引起的不确定发生错误都不是共享变量引起的,因为我只是用多线开独立的任务,有等待我都 ...


》》主线早已设置到的PE变量,在子线程有时候会解释成空串;
是不是 主线程回头又 重写了改变量,所以为空了。
PECMD2012 是C++严格封装的,(自己)不用什么全局变量。 一般不会出这种问题的。


》》另一个就是 THREAD* 开出的线程根本就不起来
这个不知道。 只有找到一个实例, 我才能看看怎么回事。


可以考虑LOGS 加**2开关, 这样LOGS打2次。 一次是执行前,用<命令>表示。 一次是现在的 [命令]错误码。
回复

使用道具 举报

5427#
发表于 2013-4-13 00:07:41 | 只看该作者
mdyblog 发表于 2013-4-12 23:57
》》主线早已设置到的PE变量,在子线程有时候会解释成空串;
是不是 主线程回头又 重写了改变量,所以 ...

应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始化一次,之后只是读,不会写,所以觉得很奇怪。

THREAD* 的线程不起来很大可能是新线程启动输出的LOG隔得太远,不在 THREAD* 的附近,所以不好判断。只有看再遇到这问题仔细查一下日志了。
回复

使用道具 举报

5428#
 楼主| 发表于 2013-4-13 00:12:33 | 只看该作者
2010qaqz111 发表于 2013-4-13 00:07
应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始化 ...

>>应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始化一次,之后只是读,不会写,所以觉得很奇怪。
那只有 缩短点, 30行以内,且可以重复出现;传上了 试试。
回复

使用道具 举报

5429#
发表于 2013-4-13 00:19:50 | 只看该作者
mdyblog 发表于 2013-4-13 00:12
>>应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始 ...

就是无法确定重现条件,每次重启有时正常,有些时候又不行,就算出错也不一定是加载同一个文件的时候出错,所以很让人抓狂。而且这问题发生的频率也不高,重启又花时间,基本可以归为疑难杂症了,等时间充裕的时候来慢慢试。
回复

使用道具 举报

5430#
发表于 2013-4-13 00:43:13 | 只看该作者
clonecd 发表于 2013-4-13 00:28
以前我跑多线程也调试了很久,后来我干脆改成两条线程了,3、4条线程很让人抓狂的。

就是啊,要不是 pe 启动用多线能明显快很多(单核单线老机能接近10秒,总启动过程1分钟左右,赛扬440M 1G内存的机器),实在很有吸引力的话,还是稳定压倒一切的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-29 00:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表