b********n 发帖数: 609 | 1 valgrind是最好用的,另外一些profiler也可以。
and |
|
b******n 发帖数: 592 | 2 I had same issues before. It is very difficult to really test mutex.
valgrind may help. My solution was to mock mutexes, and hand craft 'senarios
' for testing. Then have a very long test with random executions. |
|
b******n 发帖数: 592 | 3 越界这种情况,可以用valgrind. 变量名字起的有关一些,可以避免很多这样的问题。
这些都是程序的问题,compiler不会给你制造这种麻烦的。 |
|
b******n 发帖数: 592 | 4 there is gdb, valgrind for those debug optimization jobs. |
|
t****t 发帖数: 6806 | 5 你要学会读信息, 未初始化的内存本身没问题, 一开始分配的都没初始化, 但是如果输
出未初始化的值, 或者依靠未初始化的值跳转就会报错
22行的地方是你分配内存的地方. 59行才是使用这个值的地方. |
|
t****t 发帖数: 6806 | 6 you may use a sanitizing tool for that specific purpose, such as valgrind.
but frankly, you better use it correctly, or don't use it at all. |
|
y****e 发帖数: 23939 | 7 呵呵,谢谢。我真土啊!
doi=10.1.1.108.4263&rep=rep1&type=pdf |
|
o**o 发帖数: 3964 | 8 this thing rarely helps. |
|
r*********r 发帖数: 3195 | 9 very very helpful.
just learn to read the message. |
|
|
j*******d 发帖数: 8834 | 11 seg fault如果是前面的code有memory corruption, gdb很难找地。 |
|
l*****o 发帖数: 473 | 12 valgrind + gdb + printf |
|
t****t 发帖数: 6806 | 13 hehe, 我敢肯定99.999%是你们自己的错. O2的结果正确完全不能说明任何问题. 我建
议你用valgrind跑一次, 估计有一半机会找到uninitialized error. |
|
t****t 发帖数: 6806 | 14 valgrind is your friend. |
|
b******n 发帖数: 592 | 15 Visual Studio
Eclipse
and the rest
I stick with Vim/gdb/valgrind, C++ programming is about 50% of my work. |
|
r*********r 发帖数: 3195 | 16 xcode 不就是在 gcc, gdb 上加了一层GUI么,如果愿意,调试的时候甚至可以直接用
gdb 命令。
所谓的 IDE, 也不过就是编译器,调试器,再加个比vi/emacs烂一点的编辑器。
最多就是再加点 autocomplete, content management 之类的。
这些工具,一个一个分开用不好么。干嘛非得搞成 IDE 那么一大坨,难用死了。
像 visual studio 这样的垃圾,加个 scm 都很困难,再弄个 profiler 更是
难上加难。
学编程的,就是应该用linux 和命令行界面。至少搞清楚 gcc, gdb, nm, ldd, grep,
c++filt, valgrind, dtrace 这些常用的工具。就不会老是问一些低级问题,
什么链接库不行啦,内存泄漏啦,coredump啦,编译错误信息看不懂啦。
面试过很多号称做过大项目的人,结果基本概念一塌糊涂,好不尴尬。或者给个 ssh
login
做 coding test, 就立马完全抓瞎。都是给 IDE 惯坏了的。 |
|
c*******h 发帖数: 1096 | 17 试过getrusage,但是malloc前和malloc后的maxrss是一样的,不知问题在哪
试过valgrind,但是只能在一定频率的time_unit取到信息,没办法在任意语
句执行后取到信息
试过读/proc/self/stat,但是换到cluster上跑程序的时侯stat文件跟单机的
stat问题看着不一样,一堆数字不知道哪个才是我要的
有人也提议过重载new,自己算内存的实用。但是我还要用别人的library,
不可能把别人的code也重载一遍
苍天啊大地啊,谁告诉我一个work的方法吧 |
|
b******n 发帖数: 592 | 18 valgrind is your friend... |
|
t****t 发帖数: 6806 | 19 no this was not your question, your question was "why the core is so big",
and I answered that.
so you actually want to know "who (which line) and when memory is allocated,
with core file only", and that makes sense.
i would say it's very difficult, with core only. if memory is corrupted, i
would say it's impossible. gdb does not know the memory allocation data
structure, you need to check glibc -- and you must make sure which glibc
your client used.
i will suggest you run your code locally with... 阅读全帖 |
|
|
t*****n 发帖数: 4908 | 21 b_a只活在{}里面吧。出了{}就不存在了。可以用valgrind之类的查查。好多代码分析
软件都可以查出来。 |
|
|
|
g**********t 发帖数: 475 | 24 用神器valgrind看一下有没有memory bugs,比如下标越界,使用未初试化的变量。 |
|
|
c*******h 发帖数: 1096 | 26 no
那个我也看到了。看来不止我一个人碰到这个问题 |
|
d**********x 发帖数: 4083 | 27 99%的seg fault可以: 1. gdb,看stack trace 2.valgrind,grep到第一个越界读写
firebug调js,也有一部分是麻烦的逻辑错误,还要单步,研究逻辑... |
|
d**********x 发帖数: 4083 | 28 ....
我的意思是说,seg fault这种特别类型的bug,几乎不需要你单步去看逻辑,只要把
gdb跑上,重现就行了
或者gdb失灵的时候把valgrind跑上,重现就行了
memory bug其实没有那么难调。 |
|
d**********x 发帖数: 4083 | 29 1. use valgrind.
2. try harder to reproduce it, it's very important. |
|
|
s*w 发帖数: 729 | 31 又琢磨了两天,看了不少相关东西,终于搞定了,觉得自己对这个多线程的理解加强了
很多。思考比单纯的看人说原理更刻骨铭心。
这个问题我设计的用一个 producer 多个 consumer 的架构,上个版本的是两头用
condition_variable, 一个通知 producer 有空间了开始干活生产,另一个通知
consumer 有库存了开始消费。参见上篇里面的 wait 和 notify_all,notify_one 语
句。 这个思路对于单 producer 单 consumer 没问题,可是不适用于 多 consumer.
因为所有的 consumer 可能同时睡觉(没空存),同时醒来(有库存),结果只有一个
能抢占mutex(拿到库存),其他的只好继续睡觉(while 循环 wait). 如果无限制的
生产下去,每个睡觉的都有机会醒来干活。可是在有限生产的情况下,producer 干完
活了后,总有睡觉的 consumer 无人唤醒导致死锁。解决的办法就是用 non-block
的 try_lock, lock 不上就返回 false,这样有机会检查是否需要(还在生产或是有
... 阅读全帖 |
|
t****t 发帖数: 6806 | 32 别处出错了吧, 拿valgrind跑跑看.
ofs. |
|
c*******y 发帖数: 1630 | 33 thrust展开说说valgrind比gdb好的地方?? 谢谢 |
|
t****t 发帖数: 6806 | 34 gdb告诉你问题爆发的地方
valgrind告诉你问题发生的地方
哪个好一目了然
当然, 如果你程序逻辑有问题, 比如+写成了-, 那什么都帮不了你. |
|
|
t****t 发帖数: 6806 | 36 你看错了, 再看一下.
OP贴的这部分代码没什么问题, 问题一定在别处. 拿valgrind跑跑看. |
|
t****t 发帖数: 6806 | 37 first run with valgrind.
then run with helgrind. |
|
C********e 发帖数: 219 | 38 valgrind显示了很多大概不相关的oracle occi里面的uninitialized vairable,
condition jump based on uninitialized variable什么的,都是oracle-
instantclient shared library里面的
我试试helgrind。
谢谢建议 |
|
t****t 发帖数: 6806 | 39 你这么做的目的是什么?
如果你需要每个new返回不同的值, 有现成的模拟器(valgrind这类的)可以帮你做到这
一点. |
|
t****t 发帖数: 6806 | 40 不是说了valgrind吗? 要交钱的有purify... |
|
|
f**********3 发帖数: 295 | 42 太正常了。Java好歹能告诉你哪行,C++真是只能慢慢找了,Valgrind也不能定位到具
体那行。 |
|
W***o 发帖数: 6519 | 43 以前只是懂c的基本语法比如if, while....,没真正写过project, 连hello world都没
写过。
最近advanced OS上课需要写一个user level threads library,
在两周之内从学c到写完project,觉得pointer这东西太好使了,void pointer好像是
万能钥匙,全局的,指哪儿打哪儿。
回过头来看看,其实这个library也不难,就是先要造个scheduling engine控制流向,
再写一个queue data structure,然后就完了。最大的感触就是逻辑要清楚,pointer,
callback会用了就基本上能做出了,还有gdb, valgrind,vim是好工具,大牛
见效,谢谢帮助 |
|
c****3 发帖数: 10787 | 44 这种code review绝对看不出。
size是根据其他几个变量算的,只是在某些特定情况,才会出现0-1的情况,代码看着
很正常,就是没有考虑会出现0-1这种特定情况。在一个7x24小时运行的服务器程序上
,上面有大量用户,但是发生概率是每隔几天才会出一次,有时几个星期也不发生。所
以基本没法用valgrind找越界。 |
|
t*****n 发帖数: 4908 | 45 内存泄漏这个级别太低了。valgrind跑跑就能找到。 |
|
w***g 发帖数: 5958 | 46 是的。这个做之前得先用grep看看会不会出问题。vi没有refactor的功能,只能手写
regular expression。vi就是一个编辑器,虽然也有一些整合gdb之类的插件,但是我
觉得任何想用vi做超出编辑器功能范围的行为都是作死。emacs貌似什么事情都能做,
这个我不懂,不敢妄加评论。
我前两天发现qt-creator其实挺不错,也支持vi的大部分命令。但是是在不习惯写程序
时用鼠标,一时还没转过去。另一个原因是对我说来IDE added value确实不多。我就
是vi-make-运行-git这个循环,偶尔用用gdb和valgrind,有时需要反复做一个复杂操
作,也都用bash自动化了。不同的人干的活不一样,趁手的家伙也不一样,没必要强求
统一。qt-creator还是要推荐一下,前两天我吃饱了撑着从源代码编译了一个版本,发
现解决了几个用apt-get安装的版本里面的一些问题。前景还是挺看好的。 |
|
d****i 发帖数: 4809 | 47 看看阿里的技术大拿怎么客观看待开源和闭源的:
*************************************************
陈皓:关于开源和闭源软件我个人Naive的看法
对开源软件来个可能会引发争议的观点:对于绝大多数的软件产品来说,1)闭源的软
件产品的技术含量要比开源的要大得多。2)大多数的开源软件都在抄闭源的商用软件。
首先,我先表达一下开源软件的伟大,并向开源的人们致于我最真诚的敬意。但,即使
这样,我们也要很客观的承认大多数开源软件是存在大量问题的。就像我这个人主观上
并不喜欢微软和 IBM,但是我必需要承认,没有微软和 IBM,计算机这个行业不会有今
天这样的爆炸。(插曲:我 94 年上大学选的专业是计算机科学,当时很多人都觉得计
算机专业是一个 ZB 的专业,因为几乎没有哪个企业在用电脑,但我幸运的是 95 年的
时候微软出了 Win95,Sun 出了 Java,然后互联网极度膨胀,才导致我选的专业最终
变得很火)。
至于我说的这两句话,我知道是有争议的,尤其是我用了“抄”,在此请原谅我用词不
当,像从事开源的朋友道歉。这个“抄”其实是“模仿”的意... 阅读全帖 |
|
M**********n 发帖数: 432 | 48 valgrind test
:Thank you very much. Is there a way to track when a unassigned variable
:being used? |
|
M**********n 发帖数: 432 | 49 valgrind test
:Thank you very much. Is there a way to track when a unassigned variable
:being used? |
|
r*****8 发帖数: 2560 | 50
各位,有人用过检测memory leak的软件吗?比如我故意分配些大空间 malloc(),
到程序结束故意不 free(),看看系统能不能收回去。
维基百科说到以下软件,有人用过吗,效果如何?
IBM Rational Purify, BoundsChecker, Valgrind, Parasoft Insure++, Dr. Memory
and memwatch are some of the more popular memory debuggers for C and C++
programs.
http://en.wikipedia.org/wiki/Memory_leak |
|