惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - 玄驹子

设计一个检查控件布局的工具 我写的第一个模板类 Dogfood ETA 要开始研究.NET了 刚看《孙悟空是一个好员工》,有一段比喻很有意思 我是十足一个大蠢驴 辞职·无奈 辞职·焦虑 辞职·麻烦 等待的滋味最不好受 几个有寓意的小故事 今天老板突然找到我 XML SOAP应用简介 终于出差回来啦 我一天的颓废生活! 软件怎样推动下一代的微处理器 如果领导都觉得自己委屈了 为什么 ClearCase & ClearQuest UCM 不适用于小公司
低级失误害死人
玄驹子 · 2004-12-18 · via 博客园 - 玄驹子
 

     写了一个月的代码,前几天总算基本完工了,结果交给别人一用,处理稍大一点的文件竟然100%会crash。因为毕竟现在写代码手生的厉害,再加上时间太紧也没有对自己的程序进行过很充分的自测,心虚的很,所以只好发狠连续加班熬夜找自己的bug。

      从现象看,每次crash都是new, delete 或者malloc出的错,或者有时一个HANDLE莫名其妙地变成了一个非法值,应该是由于内存越界引起的。但是内存越界实在太难找了,心想该不会要动用Bounds Check之类的东东吧,那个家伙我不熟,这么短短的几天恐怕是学都学不会,可那边是火烧眉毛着急催着呢。最终横下一条心,还是用笨办法,回头一行一行啃自己的代码吧。

      首先第一步,怀疑是线程之间同步做得不好,于是小心翼翼地把几个线程的代码完全重新写了一遍(幸亏主要的功能都封装在类里了,所以线程的主体代码不是很多),Crash。
      第二步,把所有对数据的处理都注释掉,保留的代码只是读数据、放入buffer,取数据,释放...之类的简单操作,还是Crash...(不过这样也好,如果问题只是出在这些地方,那倒好找了,心中稍稍放松了些)
      第三步,轻松之际,仔细看了一下自己对buffer操作的函数,可是却死活没发现有什么问题,互斥和同步都做得很好,分配和释放内存也都很小心,于是怀疑是不是自己写的Queue模板有问题。
      第四步,检查自己的Queue类,总共不到300行程序,却楞是看不到内存越界的迹象。如果对这些代码反复琢磨和运行10遍以上还没看出哪里有内存越界,我想我就可以改行,或者回到大二重学一遍数据结构了(当时只考了61分,好悬 )...线索到此中断...心中又是一紧

      悲痛难过中......

      正在不知所措的时候,偶尔打开Visual Studio的Project Properties,发现有一个编译参数,Runtime Library,其中有这么两个让我印象深刻的选项:Multi-threaded Debug (/MTd) 和Single-threaded Debug (/MLd),我写的是Multi-thread,但这里我用的是缺省参数:Single-threaded Debug (/MLd)。隐隐约约我记得第一次用VC写多线程的时候就犯过这样的错误,但毕竟当时是可以容忍的,而现在...没什么好说的,结果就是加班加班再加班......老大说得对,做事情是需要素材的,我觉得我就一直是个没有素材的人。我最缺乏的也是稳重和积累...

      第一个项目感觉做地磕磕绊绊的,希望到时候能顺利交差就好了。昨天同学聚会,只喝了一点点酒,虽然酒量一向不济,但也不至于如此萎靡,眼看自己都要快Crash了,最后靠打盹喝疙瘩汤出了点汗才好起来,郁闷!