This enables all the warnings about constructions that some users consider questionable, and that are easy to avoid (or modify to prevent the warning), even in conjunction with macros. This also enables some language-specific warnings described in C++ Dialect Options and Objective-C and Objective-C++ Dialect Options.
#include
using namespace std;
long factorial(int n);
int main()
{
int n(0);
cin>>n;
long val=factorial(n);
cout<
开始调试
现在请认真的看清楚每个命令和输出,尤其是监视点,这些内容都非常基础:
在函数调用的那一行设置断点
step进入函数
为计算结果和输入数字设置监视点
最后,从监视点中分析结果并找到错误
1. $ g++ main.cpp -g -Wall -o main
2. $ gdb main
3. GNU gdb (GDB) Fedora (7.3-41.fc15)
4. Copyright (C) 2011 Free Software Foundation, Inc.
5. This GDB was configured as "i686-redhat-linux-gnu".
6. For bug reporting instructions, please see:
7. ...
8. Reading symbols from /home/manasij7479/Documents/main...done.
9. (gdb) break 11
10. Breakpoint 1 at 0x80485f9: file main.cpp, line 11.
11. (gdb) run
12. Starting program: /home/manasij7479/Documents/main
13. 3
14.
15. Breakpoint 1, main () at main.cpp:11
16. 11 long val=factorial(n);
17. (gdb) step
18. factorial (n=3) at main.cpp:19
19. 19 long result(1);
20. (gdb) list
21. 14 return 0;
22. 15 }
23. 16
24. 17 long factorial(int n)
25. 18 {
26. 19 long result(1);
27. 20 while(n--)
28. 21 {
29. 22 result*=n;
30. 23 }
31. (gdb) watch n
32. Hardware watchpoint 2: n
33. (gdb) watch result
34. Hardware watchpoint 3: result
35. (gdb) continue
36. Continuing.
37. Hardware watchpoint 3: result
38.
39. Old value = 0
40. New value = 1
注意到result开始为0然后初始化为1.
41. factorial (n=3) at main.cpp:20
42. 20 while(n--)
43. (gdb)
注意没有输入新命令,敲回车GDB会再次执行上一条命令
44. Continuing.
45. Hardware watchpoint 2: n
46.
47. Old value = 3
48. New value = 2
注意到n立即从3变成了2
49. 0x08048654 in factorial (n=2) at main.cpp:20
50. 20 while(n--)
51. (gdb)
52. Continuing.
53. Hardware watchpoint 3: result
54.
55. Old value = 1
56. New value = 2
57. factorial (n=2) at main.cpp:20
58. 20 while(n--)
59. (gdb)
60. Continuing.
61. Hardware watchpoint 2: n
62.
63. Old value = 2
64. New value = 1
n从2变成了1,result没有改变(因为n=1)
65. 0x08048654 in factorial (n=1) at main.cpp:20
66. 20 while(n--)
67. (gdb)
68. Continuing.
69. Hardware watchpoint 2: n
70.
71. Old value = 1
72. New value = 0
n从2变成了0
73. 0x08048654 in factorial (n=0) at main.cpp:20
74. 20 while(n--)
75. (gdb)
76. Continuing.
77. Hardware watchpoint 3: result
78.
79. Old value = 2
80. New value = 0
现在result也变成了0,因为它跟n现在的值相乘了。另一个bug!循环应该在n变成0之前中止。
81. factorial (n=0) at main.cpp:20
82. 20 while(n--)
83. (gdb)
84. Continuing.
85. Hardware watchpoint 2: n
86.
87. Old value = 0
88. New value = -1
89. 0x08048654 in factorial (n=-1) at main.cpp:20
90. 20 while(n--)
91. (gdb)
92. Continuing.
93.
94. Watchpoint 2 deleted because the program has left the block in
95. which its expression is valid.
96.
97. Watchpoint 3 deleted because the program has left the block in
98. which its expression is valid.
这就是被监视的变量离开作用域以后会发生的事情。
99. 0x08048605 in main () at main.cpp:11
100. 11 long val=factorial(n);
101. (gdb) print val
102. $1 = 1293357044
print val输出了一个垃圾值,因为gdb指向的是函数执行前的某一行。
103. (gdb) next
104. 12 cout<
下面是程序修正:
while(n>0) //doesn't let n reach 0
{
result*=n;
n--; //decrements only after the evaluation
}
什么是Hessian
The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary p
在Spark Shell上,通过创建HiveContext可以直接进行Hive操作
1. 操作Hive中已存在的表
[hadoop@hadoop bin]$ ./spark-shell
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Welcom
JMS Message Delivery Reliability and Acknowledgement Patterns
http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
Transaction and redelivery in
转载请出自出处:http://eksliang.iteye.com/blog/2177567 一、游标
数据库使用游标返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效控制,从shell中定义一个游标非常简单,就是将查询结果分配给一个变量(用var声明的变量就是局部变量),便创建了一个游标,如下所示:
> var