JUST DO IT ~

我只想当个程序员

2013年8月20日

     摘要: 检查宏定义
WIN32
_DEBUG
_WINDOWS
_USRDLL  阅读全文
posted @ 2017-08-16 10:43 小高 阅读(384) | 评论 (0)编辑 收藏

GDB笔记

概览

基础

用户态会话

调试模式

  • 转储文件调试

    瞬间静态分析,进程死状态。
    gdb –core=file

  • 交互调试

    1. 调试新进程
      gdb exe
      gdb –args exe [args]

    2. 调试已经运行的进程
      gdb –pid= 进程号

    3. 内核调试

3种调试已有进程

gdb exe

.

gdb –args exe [args]

.

gdb
file exe
run [args]

.

gdb –args gcc a.c -o a

命令行参数

show args

set args 多次运行设置命令行参数

环境变量和执行路径

path directory

.

show paths

.

show environment [varname]

.

set environment varname[=value] 清除或者设置环境变量

工作目录

继承进入gdb工作目录

改变工作目录

cd dirctory

显示路径

pwd

输入输出

info terminal
run > a.txt
tty /dev/ttyb

远程调试可用这些辅助。

inferior 下层 多个进程调试

inferior gdb维护的一系列对象,每个inf对应一个调试目标进程。

info inferior 显示下层信息
NULL 程序没有跑或者已经终止
clone-inferior -copies 2 复制当前下层2份

(gdb) info inferiors
Num Description Executable
* 1 process 10087 /home/gao/code/a
(gdb) clone-inferior -copies 2
Added inferior 2.
Added inferior 3.
(gdb) info inferiors
Num Description Executable
3 程序没有跑或者已经终止 /home/gao/code/a
2 /home/gao/code/a
* 1 process 10087 /home/gao/code/a
(gdb)

切换下程

inferior 2 切换2这个下程。
进程号是0,没开始运行。
run 运行起来。

.

增加一个运行下层

add-inferior -exec executeable 增加一个运行下层
比如说调试一个服务端程序,一个客户端程序。

remove-inferior n 删掉一个下层
detach inferior 继续运行 quit
kill inferior 调试进程退了,但是inferior纪录还在。

Tab 帮助

(gdb) remove-
remove-inferiors remove-symbol-file
(gdb) remove-
remove-inferiors remove-symbol-file
(gdb) remove-

file 命令

file a.exe 可自行文件和符号文件是一个文件

可自行文件和符号文件分开

exec-file 指定目标文件

.

symbol-file 指定符号文件

run 开始运行
可以支持 run > >> < 重定向

set args 清理命令行参数

附加到进程

gdb –pid= pid

attach pid

终止调试进程

detach pid 分离进程继续运行

.

quit 进程退出

.

q
ctrl + D

执行控制

断点

软件断点

break 普通
tbreak 一次性
rbreak 正则表达式一批断点

  • 基于cpu断点指令,x86 int3机器码0xcc。
  • 替换断点位置的指令
  • CPU自执行这里触发断点异常。
  • 没有断点数量限制。

硬件断点

  • 基于cpu调试寄存器,dr0~dr7,数量限制。x86可以设定4个断点。数量限制。
  • 不修改代码,在只读内存上设置断点。EEPROM上的代码设置。
  • 有数量限制。

location

  • linespec

  1. 行号
  2. -/+ 偏移
  3. 文件名 :行号
  4. 函数名
  5. 函数:标号
  6. 文件名:函数
  7. 标号

  • explicit

  1. -source linename
  2. -function function
  3. -label label
  4. -line number

  • address location break * address

实践

file banner
b main 中断在main函数
info funciton useage 显示useage函数地址
info *0x88888e4 直接写地址设定断点
info b 显示所有断点
list usage 显示useage函数
b line.c:11
b +2 当前显示到14行+2行所以设定在17行

虚拟机设定硬件断点会失败.
(gdb)hbreak hd_ioctl
(gdb) info b
物理机可以设定.

(gdb) hbreak v
Hardware assisted breakpoint 2 at 0x40053a: v. (2 locations)
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y
breakpoint already hit 1 time
1.1 y 0x000000000040054f in main at a.c:10 inf 1
1.2 y 0x000000000040054f in main at a.c:10 inf 2
2 hw breakpoint keep y
2.1 y 0x000000000040053a in v at a.c:4 inf 1
2.2 y 0x000000000040053a in v at a.c:4 inf 2
(gdb)

管理断点

info b 显示断点
delete 1 删除
disable 1
enable 1
delete 删除所有的断点
clear sum 删除sum函数入口的所有断点

扩展断点

watchpoint 监视一个表达式,值变化中断。

watch a*b+c/d
watch *( int * )

watch fd 监控局部变量fd
c 继续运行
info b //
注意,x86硬件调试,写操作,执行过这一行,gdb显示下一行,要看上一行。hw watchpoint,在x86平台wachtpoint基于硬件实现,其他平台可能是基于软件实现。 vc6纯软件执行,执行目标速度低。
执行位置超过当前区域,无效监视点会被删除。

访问监视点
rwatch 读停下来。
awatch 读或写停下来。 awatch fd
watch -l

b hd_ioctl thread 1

info threads 带* 当前线程

繁忙函数解决方案

b hd_ioctl thread 1 if fd > 0

当断点,断了后执行命令
()command 12
()silent
()print “fd is %d\n”,fd
()continue
()end

动态ping不修改代码。

tracepoint 远程主机通讯调试,前端stub立刻恢复执行,但会记录下来。

catchpoint

执行控制

进入子函数内部。单步 step

汇编 stepi

stepi 4
类似nexti

不要进入子函数

next

继续执行

continue

跑起来直到3号断点命中

until 3
跑起来直到3号断点命中,快捷禁止其他断点。

恢复执行直到函数返回。

finish

调用函数!

gdb 杜撰代码调用函数。
call sum(1,2) …

强制返回

强制main函数 return。
return 1

触发中断

异常或断点进入调试器。
调试器发起中断,让程序中断下来。ctrl+C,app收到中断信号,进入调试器。

符号

调试器读区 调试符号。

二进制-调试符号-源码

linux dwarf 存储调试符号信息。gcc

readelf -h filename
里面如果有line location debug标示

readelf -w 导出调试文件

gcc -g 才能输出符号

ubuntu 符号服务器
< ddebs.ubuntu.com/pool/main/>
分离操作
strip

安装ubunte的linux 内核符号
https://askubuntu.com/questions/197016/how-to-install-a-package-that-contains-ubuntu-kernel-debug-symbols

安装libc符号

dpkg -s /lib/x86_64-linux-gun/libc-2.15.so
dpkg -s libc.so.6
sudo apt-get -c aptproxy.conf install libc6-dbg

libc 调试符号

sudo apt-get install libc6-dbg

符号路径

gdb 使用file 或 symbol-file 加载符号文件
自动搜索 path 路径

(gdb)i share
* 共享库没调试信息

搜索符号
info vaiables regex 类名/函数名/变量名

内存地址与符号互换

info addriess 函数名

info symbol 地址

(gdb) info address main
Symbol “main” is a function at address 0x400547.
(gdb) info symbol 0x400547
main in section .text of /home/gao/code/a

.

info os

查看加载的文件内存位置

info files

列出全局变量

info variable
info va

显示源码

list
list -
dir 源码路径
show dir

常用命令源码

安装系统工具源码和调试

apt-get source coreutils
sudo apt-get install coreutils-dbgsym
gdb /bin/ls
list main
dir ~/src/coreutils-7.4/src
list main

libc

sudo apt-get source libc6-dev
/home/ge/eglibc-2.15

dir 搜索路径 :分割
$cdir 编译路径
cwd 当前工作路径

查看调试目标

观察寄存器
info reg


子函数返回地址
函数参数
局部变量

bt n 观察函数返回地址
frame n 切换栈帧
up n
down n
info frame [address]
info args
info locals

注意,切换栈帧之后可能会发生,本地变量值不准确,因为值存在寄存器中需要小心。

观察内存
print

p /f 表达式 表达式要打印位置
xduotcf

x

x /Nuf
N 打印几个单元
u 每个单元大小 b-1byte w-2byte h-4byte g-8byte

f s字符串i指令格式

x/s 0xfffff81946000 打印字符串

x /32bx arg bit 16禁制

(gdb) x /32bx &i
0x7fffffffc76c: 0x01 0x00 0x00 0x00 0x70 0x05 0x40 0x00
0x7fffffffc774: 0x00 0x00 0x00 0x00 0x40 0xfa 0xa2 0xf7
0x7fffffffc77c: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
0x7fffffffc784: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
(gdb)

p arg[0]
p arg[i]

p *&a[0]@10 a0数组开始的10个元素

反汇编

disas main main反汇编代码
x/5i schedule 这个地址开始的5条汇编指令。

gdb mov 从左往右赋值at&t汇编。

高级技巧

信号

  • info signals 异常/同步/中断

stop 要不要中断下来看
printf 打印信息
pass 要不要传递给应用程序。

  • handle 修改规则 handle signal act print noprint stop nostop pass nopass

handle SIGPIPE 不要中断下来,打印一个信息,网络程序常用

(gdb) handle SIGPIPE nostop
Signal Stop Print Pass to program Description
SIGPIPE No Yes Yes Broken pipe

Thread

info threads

LWP-light weight process 线程编号。
* gdb当前线程

切换当前线程

thread 2

打印所有线程

thread apply all bt 针对一群线程的命令避免切换来看。

线程改名字

thread name [name]

我自己经验 LWP 可以很好的观察线程负载情况。

posted @ 2017-05-24 14:18 小高 阅读(305) | 评论 (0)编辑 收藏
     摘要: 绘图控件重绘->其他操作->绘图控件重绘

进入了这样一个死循环,函数堆栈空间分配不足够.  阅读全文
posted @ 2017-04-18 10:32 小高 阅读(156) | 评论 (0)编辑 收藏
eclipse 配置遇到 object 找不到问题 ?
The type java.lang.object cannot be resolved - Eclipse buildpath not working

因为替换了 jvm版本.
解决办法: 
build->library -> add library->add jre library.


tomcat部署问题.?
1.清理 部署 重启.  
2.先删掉部署项目,可以重新配置config.

tomcat 找不到oracle 驱动程序?
Tomcat error: java.sql.SQLException: No suitable driver found for jdbc
catalina_home/lib 中已经放入了jar文件后还是报错.
请在 context.xml 中配置
 <WatchedResource>WEB-INF/web.xml</WatchedResource>
 <ResourceLink global="jdbc/oracle" name="jdbc/oracle" type="javax.sql.DataSource"/>
 
在 server.xml

       <Resource
        name="jdbc/oracle"
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@10.243.140.111:1521:test"
        username="core"
        password="core"/>

eclipse 项目属性, web deployment assembly设置   source: /webcontent   deploypath: / 


    
tomcat 开启gzip压缩
http://blog.csdn.net/hbcui1984/article/details/5666327



Setting property 'source' to 'org.eclipse.jst.jee.server 这个不是问题.

解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题.
http://blog.csdn.net/foreversilent/article/details/11147847

posted @ 2017-03-09 10:02 小高 阅读(181) | 评论 (1)编辑 收藏
     摘要:   阅读全文
posted @ 2016-12-15 09:34 小高 阅读(483) | 评论 (0)编辑 收藏
     摘要: qt ubuntu 安装和中文  阅读全文
posted @ 2016-12-01 16:30 小高 阅读(323) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2016-05-13 15:59 小高 阅读(225) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-12-27 17:07 小高 阅读(478) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-12-15 15:57 小高 阅读(257) | 评论 (0)编辑 收藏
     摘要: 解决socket 太多问题.  阅读全文
posted @ 2015-12-10 10:39 小高 阅读(306) | 评论 (0)编辑 收藏

C面向对象编程汇集

参考资料:
Object-oriented Programming with ANSI-C
1993年,第一份c如何编写OO的资料,free.
OOC.PDF
https://www.cs.rit.edu/~ats/books/ooc.pdf

中文翻译:
https://code.google.com/p/ooc/downloads/detail?name=ooc-translate-preview-r26.pdf&can=2&q=

轻量级的C语言面向对象编程框架
http://sinojelly.blog.51cto.com/479153/281184

UML—OOPC嵌入式C语言开发精讲
里面有一套框架可以 c写OO.
http://pan.baidu.com/share/link?shareid=3402978666&uk=3188261067&adapt=pc&fr=ftw#path=%252FC%25E8%25AF%25AD%25E8%25A8%2580

你试过这样写C程序吗 --函数式编程
< >

我所偏爱的 C 语言面向对象编程范式--云风
http://blog.codingnow.com/2010/03/object_oriented_programming_in_c.html

C语言面向对象编程 -- 6篇专栏
http://blog.csdn.net/column/details/object-orient-c.html

posted @ 2015-11-24 23:32 小高 阅读(404) | 评论 (0)编辑 收藏

测试代码的locality。
数组的读区方式不同,按照行读,被cache也是按行连续加载的。
如果按照列读区,那么效率很低,除非cache足够大,而且也要遍历所有的数据,并且cache hash算法也好,实现的硬件还是多路组相联的cache硬件实现。

** valgrind --tool=cachegrind ./test2**

code1:

#include <stdio.h>
#define MAXROW 8000
#define MAXCOL 8000
int main () {
int i,j;
 static int x[MAXROW][MAXCOL];
 printf ("Starting!\n");
       for (i=0;i<MAXROW;i++)
       for (j=0;j<MAXCOL;j++)
              x[i][j] = i*j;
             printf("Completed!\n");
return 0;                                                    
 }

code2:

#include <stdio.h>                                                         
 #define MAXROW 8000
 #define MAXCOL 8000
 int main () {
 int i,j;
 static int x[MAXROW][MAXCOL];
 printf ("Starting!\n");
          for (j=0;j<MAXCOL;j++)
                         for (i=0;i<MAXROW;i++)
                 x[i][j] = i*j;
 printf("Completed!\n");
 return 0;
 }
 ```

##结果

Command: ./test1
Starting!
Completed!

I refs: 905,721,688
I1 misses: 4,177
LLi misses: 2,808
I1 miss rate: 0.00%
LLi miss rate: 0.00%

D refs: 514,830,867 (386,118,735 rd + 128,712,132 wr)
D1 misses: 4,025,828 ( 23,565 rd + 4,002,263 wr)
LLd misses: 4,008,456 ( 6,997 rd + 4,001,459 wr)

D1 miss rate: 0.8% ( 0.0% + 3.1% )
LLd miss rate: 0.8% ( 0.0% + 3.1% )

LL refs: 4,030,005 ( 27,742 rd + 4,002,263 wr)
LL misses: 4,011,264 ( 9,805 rd + 4,001,459 wr)
LL miss rate: 0.3% ( 0.0% + 3.1% )

gcc -o test2 test2.c
** valgrind --tool=cachegrind ./test2**

I refs: 905,720,801
I1 misses: 4,113
LLi misses: 2,811
I1 miss rate: 0.00%
LLi miss rate: 0.00%

D refs: 514,830,348 (386,118,427 rd + 128,711,921 wr)
D1 misses: 64,025,705 ( 23,462 rd + 64,002,243 wr)
LLd misses: 4,016,427 ( 6,977 rd + 4,009,450 wr)
D1 miss rate: 12.4% ( 0.0% + 49.7% )
LLd miss rate: 0.8% ( 0.0% + 3.1% )

LL refs: 64,029,818 ( 27,575 rd + 64,002,243 wr)
LL misses: 4,019,238 ( 9,788 rd + 4,009,450 wr)
LL miss rate: 0.3% ( 0.0% + 3.1% )

Starting!
Completed!
```

参考:

valgrind调试CPU缓存命中率和内存泄漏
http://laoxu.blog.51cto.com/4120547/1395236

posted @ 2015-11-15 22:20 小高 阅读(260) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-09-23 11:26 小高 阅读(226) | 评论 (0)编辑 收藏
     摘要: <未完成>
容错系统的研究.
豆瓣可以搜索几本书.  阅读全文
posted @ 2015-09-16 14:05 小高 阅读(226) | 评论 (0)编辑 收藏
     摘要: 未完成.  阅读全文
posted @ 2015-08-26 14:49 小高 阅读(291) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-08-26 14:41 小高 阅读(300) | 评论 (0)编辑 收藏
     摘要: 待学.  阅读全文
posted @ 2015-08-26 13:33 小高 阅读(306) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-08-26 10:53 小高 阅读(279) | 评论 (0)编辑 收藏
     摘要: wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O $HOME/.dircolors
echo 'eval $(dircolors -b $HOME/.dircolors)' >> $HOME/.bashrc
. $HOME/.bashrc   阅读全文
posted @ 2015-08-25 16:26 小高 阅读(1793) | 评论 (0)编辑 收藏
     摘要: 未完成.  阅读全文
posted @ 2015-08-25 15:38 小高 阅读(235) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-08-25 13:42 小高 阅读(788) | 评论 (0)编辑 收藏
     摘要: typedef struct AA
{
AA * ptr;
}AA ;  阅读全文
posted @ 2015-08-24 13:57 小高 阅读(4535) | 评论 (0)编辑 收藏
     摘要: sysctl.conf  阅读全文
posted @ 2015-08-20 18:24 小高 阅读(322) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-08-13 10:10 小高 阅读(213) | 评论 (0)编辑 收藏
     摘要: 未完成.  阅读全文
posted @ 2015-08-02 12:12 小高 阅读(212) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-28 16:51 小高 阅读(239) | 评论 (0)编辑 收藏
     摘要: EXEC sp_configure 'remote query timeout', 0 ;
GO
RECONFIGURE ;
GO  阅读全文
posted @ 2015-07-28 13:54 小高 阅读(262) | 评论 (0)编辑 收藏
     摘要: ldd -r aa.so   阅读全文
posted @ 2015-07-26 18:08 小高 阅读(406) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-23 22:18 小高 阅读(290) | 评论 (0)编辑 收藏
     摘要: 未完成.  阅读全文
posted @ 2015-07-21 13:20 小高 阅读(222) | 评论 (0)编辑 收藏
     摘要: 1. 用户提交
2. 有1/3重做日志缓冲区未被写入磁盘
3. 有大于1M的重做日志缓冲区未被写入磁盘
4. 每隔3 秒钟
5. DBWR 需要写入的数据的SCN大于LGWR记录的SCN,DBWR 触发LGWR写入。   阅读全文
posted @ 2015-07-20 16:24 小高 阅读(829) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-19 23:11 小高 阅读(470) | 评论 (0)编辑 收藏
     摘要: 待完成.  阅读全文
posted @ 2015-07-19 23:00 小高 阅读(338) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-19 22:40 小高 阅读(466) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-19 16:26 小高 阅读(240) | 评论 (0)编辑 收藏
     摘要: time dd if=/dev/zero bs=1024 count=1000000 of=./1Gb.file
dd if=./1Gb.file bs=64k |dd of=/dev/null
dd if=./1Gb.file bs=1MB |dd of=/dev/null  阅读全文
posted @ 2015-07-19 12:12 小高 阅读(500) | 评论 (0)编辑 收藏
     摘要: mac为什么主机名.local
搞不清楚为什么.也许区分本地网络,进程间通讯优化? 为了程序方便 /ect/hosts 添加127.0.0.1 指向主机名.
sudo vim /etc/hosts   阅读全文
posted @ 2015-07-19 10:59 小高 阅读(889) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-17 23:12 小高 阅读(2233) | 评论 (0)编辑 收藏
     摘要: 未完成.  阅读全文
posted @ 2015-07-17 21:34 小高 阅读(267) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-12 10:49 小高 阅读(194) | 评论 (0)编辑 收藏
     摘要: 待完成.  阅读全文
posted @ 2015-07-12 09:27 小高 阅读(327) | 评论 (0)编辑 收藏
     摘要: 待完成.  阅读全文
posted @ 2015-07-12 00:32 小高 阅读(188) | 评论 (0)编辑 收藏
     摘要: 待完成.  阅读全文
posted @ 2015-07-12 00:27 小高 阅读(335) | 评论 (0)编辑 收藏
     摘要: 待完成  阅读全文
posted @ 2015-07-12 00:17 小高 阅读(326) | 评论 (0)编辑 收藏
     摘要: 待完成.  阅读全文
posted @ 2015-07-12 00:13 小高 阅读(183) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-10 16:45 小高 阅读(313) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-10 15:39 小高 阅读(211) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-07 09:53 小高 阅读(991) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 15:20 小高 阅读(201) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 15:13 小高 阅读(292) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 15:08 小高 阅读(242) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 14:39 小高 阅读(209) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 14:39 小高 阅读(155) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 14:36 小高 阅读(258) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-07-06 14:09 小高 阅读(476) | 评论 (0)编辑 收藏
     摘要: #ifdef WIN32
WSADATA wsa_data;
WSAStartup(0x0201, &wsa_data);
#endif  阅读全文
posted @ 2015-07-06 12:33 小高 阅读(865) | 评论 (0)编辑 收藏
     摘要: 待填坑.  阅读全文
posted @ 2015-07-01 13:52 小高 阅读(274) | 评论 (0)编辑 收藏
     摘要: 在windows上编译openssl 和 libevent.
libevent-2.0.22-stable
openssl-1.0.2c   阅读全文
posted @ 2015-07-01 10:36 小高 阅读(2567) | 评论 (0)编辑 收藏
libevent windows构建
warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突
问题原因:
exe 是debug版本.
静态库是release版本.
编译libevent 
C:\dev\mylibevent\libevent-2.0.22-stable>nmake /f Makefile.nmake

原来的修改 relase 版本多线程静态库  CFLAGS=    /MT

编译的时候需要配置合适的线程库 

拷贝出一个Makefile_D.nmake  多线程debug静态库
CFLAGS= ....    /MTd

工程中链接对应的版本的lib文件.

参考: 

https://msdn.microsoft.com/zh-cn/library/vstudio/abx4dbyh(v=vs.110).aspx

http://www.cnblogs.com/luxiaoxun/p/3603399.html
http://zyan.cc/libevent_windows/

posted @ 2015-06-30 11:21 小高 阅读(483) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-30 10:05 小高 阅读(269) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-29 14:48 小高 阅读(244) | 评论 (0)编辑 收藏
     摘要: 高性能Linux服务器构建实战:运维监控、性能调优与集群应用

构建高可用Linux服务器 2  阅读全文
posted @ 2015-06-28 20:37 小高 阅读(230) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-23 14:42 小高 阅读(214) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-23 14:39 小高 阅读(370) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-22 22:23 小高 阅读(283) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-22 21:21 小高 阅读(317) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-22 15:21 小高 阅读(301) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-21 14:28 小高 阅读(226) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-21 12:15 小高 阅读(209) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-21 11:54 小高 阅读(245) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-19 18:03 小高 阅读(271) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-18 10:28 小高 阅读(549) | 评论 (0)编辑 收藏
     摘要: 1.网络io文件大小未定,作为类库的设计者.
小文件太多,不好.IO性能差.
单个文件太大,如果都用memorybuffer,内存占用会非常的大.
设计者考虑2边的灵活性.  阅读全文
posted @ 2015-06-17 21:12 小高 阅读(284) | 评论 (0)编辑 收藏
     摘要: 8.8.8.8
114.114.114.114
223.5.5.5
223.6.6.6  阅读全文
posted @ 2015-06-16 17:00 小高 阅读(231) | 评论 (0)编辑 收藏
     摘要: xee下载地址
https://code.google.com/p/xee/downloads/detail?name=Xee2.2.zip&can=1&q=
自己开了一个分支
https://github.com/gddg/xee   阅读全文
posted @ 2015-06-16 16:34 小高 阅读(1009) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-06-08 14:41 小高 阅读(293) | 评论 (0)编辑 收藏
     摘要: 0.1000M 网络.
1.8口交换机
2.支持vlan
3.支持Qos
4.支持端口聚合.
Cisco SG200-08
5.POE 通过网线供电给USB CAM 功能.
  阅读全文
posted @ 2015-06-06 16:54 小高 阅读(302) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-29 18:16 小高 阅读(214) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-29 18:04 小高 阅读(207) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-20 17:21 小高 阅读(253) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-19 22:57 小高 阅读(302) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-15 15:51 小高 阅读(208) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-11 14:51 小高 阅读(239) | 评论 (0)编辑 收藏
Error running 'requirements_debian_libs_install gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool',
showing last 15 lines of /home/gao/.rvm/log/1431136216_ruby-2.2.2/package_install_gawk_libreadline6-dev_libssl-dev_libyaml-dev_libsqlite3-dev_sqlite3_autoconf_libgdbm-dev_libncurses5-dev_automake_libtool.log
sudo:/var/lib/sudo 对非所有者可写(040777),模式应该为 0700
对不起,请重试。
正在读取软件包列表...
正在分析软件包的依赖关系树...
正在读取状态信息...
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
 libssl-dev : 依赖: libssl1.0.0 (= 1.0.1f-1ubuntu2) 但是 1.0.1f-1ubuntu2.4 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
++ return 100
++ return 100

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解决办法? 
posted @ 2015-05-09 09:53 小高 阅读(2274) | 评论 (0)编辑 收藏

Jumping Into C++ 完整英文版 
http://vdisk.weibo.com/s/lFnhClqHrmi
posted @ 2015-05-08 16:34 小高 阅读(234) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-08 10:47 小高 阅读(210) | 评论 (0)编辑 收藏
     摘要: http://askubuntu.com/questions/50704/sudo-error-is-mode-0777-should-be-0440
  阅读全文
posted @ 2015-05-07 22:48 小高 阅读(1394) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-07 22:35 小高 阅读(907) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-07 14:03 小高 阅读(213) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-07 14:01 小高 阅读(227) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-07 10:59 小高 阅读(374) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-06 07:50 小高 阅读(205) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-02 08:59 小高 阅读(245) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-01 22:43 小高 阅读(361) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-05-01 13:34 小高 阅读(969) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-28 13:27 小高 阅读(188) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-23 07:11 小高 阅读(671) | 评论 (0)编辑 收藏
     摘要: iconv -f gb2312 -t utf-8 20150422_0.log >>a.log  阅读全文
posted @ 2015-04-23 07:10 小高 阅读(248) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-20 18:00 小高 阅读(187) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-20 14:15 小高 阅读(375) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-15 16:17 小高 阅读(244) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-15 14:55 小高 阅读(295) | 评论 (0)编辑 收藏
     摘要: echo "IRB.conf[:PROMPT_MODE] = :DEFAULT" > ~/.irbrc

echo "IRB.conf[:PROMPT_MODE] = :SIMPLE" > ~/.irbrc  阅读全文
posted @ 2015-04-13 21:03 小高 阅读(176) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-12 21:58 小高 阅读(173) | 评论 (0)编辑 收藏
     摘要: 非常喜欢的一篇文章.介绍了execption c# 设计思路.  阅读全文
posted @ 2015-04-12 11:38 小高 阅读(203) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-11 22:46 小高 阅读(2356) | 评论 (0)编辑 收藏
     摘要: vim ~/.bash_profile
alias ls='ls -F'
alias cls='clear'
alias grep='grep --color=auto'
CLICOLOR="xterm-color"
LSCOLORS="gxfxcxdxcxegedabagacad"
export CLICOLOR LsCOLORS  阅读全文
posted @ 2015-04-11 22:28 小高 阅读(267) | 评论 (0)编辑 收藏
     摘要: 这个终端主题颜色配置很舒服.各种软件对应的主题都有.

http://ethanschoonover.com/solarized/files/solarized.zip  阅读全文
posted @ 2015-04-11 20:52 小高 阅读(607) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-11 15:30 小高 阅读(183) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-11 12:02 小高 阅读(233) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-10 18:25 小高 阅读(195) | 评论 (0)编辑 收藏
     摘要: 技术树概览

http://html5ify.com/fks/#index_内容贡献者

前端文摘:Web 开发模式演变历史和趋势
http://www.cnblogs.com/lhb25/p/web-development-mode-evolve.html

A brief history of web design for designers
http://blog.froont.com/brief-history-of-web-design-for-designers/  阅读全文
posted @ 2015-04-10 14:48 小高 阅读(220) | 评论 (0)编辑 收藏
     摘要: http://tonybai.com/2010/12/14/create-libraries-with-libtool/

使用 GNU Libtool 创建库
https://www.ibm.com/developerworks/cn/aix/library/1007_wuxh_libtool/  阅读全文
posted @ 2015-04-10 14:19 小高 阅读(247) | 评论 (0)编辑 收藏
     摘要: Git Community Book 中文版
http://gitbook.liuhui998.com/1_1.html

台湾ihower写的
https://ihower.tw/git/  阅读全文
posted @ 2015-04-09 21:36 小高 阅读(214) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-04-09 17:46 小高 阅读(254) | 评论 (0)编辑 收藏
     摘要: 七周七并发模型  阅读全文
posted @ 2015-04-09 17:41 小高 阅读(201) | 评论 (0)编辑 收藏
     摘要: Ruby on Rails 實戰聖經
https://ihower.tw/rails4/

笨方法學 Ruby
http://lrthw.github.io/  阅读全文
posted @ 2015-04-09 10:14 小高 阅读(219) | 评论 (0)编辑 收藏
     摘要: brew install coreutils
gun tools 替换掉osx
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"  阅读全文
posted @ 2015-04-04 17:33 小高 阅读(431) | 评论 (0)编辑 收藏
     摘要: 下载key替换工具 karabiner
control_L to command_L
option_R to delete
FN 键盘+F1 F2 如果你想替换成直接按F1就调用的话,可以macosx 键盘里面找到。发现FN键盘无法移到别的键上。
目前还没看出来mac上option,control 键的原生用途。
键程和windows很不一样。  阅读全文
posted @ 2015-04-04 11:24 小高 阅读(606) | 评论 (0)编辑 收藏
     摘要: brew install libtool
brew install autoconf
brew install automake
glibtool --help
sh autogen.sh
./configure
make
make check  阅读全文
posted @ 2015-03-26 20:35 小高 阅读(1689) | 评论 (0)编辑 收藏
     摘要: cobertura   阅读全文
posted @ 2015-03-26 10:27 小高 阅读(1427) | 评论 (0)编辑 收藏
     摘要: Docroot is: /usr/local/var/www
/usr/local/etc/nginx/nginx.conf to 8080
ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
nginx  阅读全文
posted @ 2015-03-22 22:09 小高 阅读(215) | 评论 (0)编辑 收藏
     摘要: brew install ??   阅读全文
posted @ 2015-03-22 21:55 小高 阅读(192) | 评论 (0)编辑 收藏
     摘要: chmod -R 777 /usr/local/
GMac:~ XXXX$ brew install cmake  阅读全文
posted @ 2015-03-22 11:36 小高 阅读(5388) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-22 10:21 小高 阅读(222) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-21 23:16 小高 阅读(399) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-21 23:11 小高 阅读(271) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-21 23:07 小高 阅读(429) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-21 22:22 小高 阅读(401) | 评论 (0)编辑 收藏
     摘要: pmset -g
sudo pmset -a hibernatemode 3  阅读全文
posted @ 2015-03-21 22:18 小高 阅读(424) | 评论 (0)编辑 收藏
     摘要: Go to System Preferences -> Keyboard -> Keyboard tab -> Modifier keys
Swap the Control and Cmd keys  阅读全文
posted @ 2015-03-21 21:58 小高 阅读(423) | 评论 (0)编辑 收藏
     摘要: 目前知名的mq :
zeromq -- c++ 实现
ActiveMQ
JMS -- java的消息服务,j2ee 各家实现不同
MS Queue --
RabbitMQ
nanomsg
lightq  阅读全文
posted @ 2015-03-20 23:02 小高 阅读(738) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-20 09:39 小高 阅读(1908) | 评论 (0)编辑 收藏
     摘要: Sublime Text 2
安装插件:
https://gitcafe.com/ghosTM55/sublime-config  阅读全文
posted @ 2015-03-19 16:41 小高 阅读(181) | 评论 (0)编辑 收藏

1.vc  编译

V52$HM2(%G~9EQ7}NBWF%[5

头文件

#include <omp.h

omp_set_num_threads(threadNumber);
#pragma omp parallel default(shared) private(i,riskId) 
    {
#pragma  omp for   

}

}

 

GCC配置

1. 编译

-fopenmp
设定线程数量 export OMP_NUM_THREADS=6
 
 
 
参考

通过 GCC 学习 OpenMP 框架

http://www.ibm.com/developerworks/cn/aix/library/au-aix-openmp-framework/
 
posted @ 2015-03-19 16:31 小高 阅读(317) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-18 17:18 小高 阅读(182) | 评论 (0)编辑 收藏
     摘要: SQLnet.ora
DIAG_ADR_ENABLED=OFF
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
  阅读全文
posted @ 2015-03-18 17:16 小高 阅读(553) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-16 18:37 小高 阅读(170) | 评论 (0)编辑 收藏
     摘要: 总结一些看法  阅读全文
posted @ 2015-03-15 13:07 小高 阅读(250) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-03-12 14:07 小高 阅读(272) | 评论 (0)编辑 收藏
     摘要: 待总结  阅读全文
posted @ 2015-03-12 13:55 小高 阅读(201) | 评论 (0)编辑 收藏
     摘要: 1.ms sql 的配置

安装了 sql- server2005 express ,安装默认会关闭网络连接的等.需要打开ip:1433端口.

账户密码需要使用,ms sql–server 登录登录.

2.sqlapi 的使用.

正确的sqlapi ++ ms sql server 串
char * dbname = "127.0.0.1\\SQL2005EXPRESS@master";
  阅读全文
posted @ 2015-03-10 17:19 小高 阅读(1063) | 评论 (0)编辑 收藏
     摘要: typedef unsigned short WORD;
#define WORD unsigned short
冲突
解决办法:
1.因为2个头文件来自不同项目. 修改源文件彻底解决掉这个问题.
2.先后引用位置 .
3.隐藏不必要的 .h文件,只有需要cpp才添加h引用.这样防止不必要的引用.  阅读全文
posted @ 2015-02-26 18:20 小高 阅读(2192) | 评论 (0)编辑 收藏
代码分支预判断
http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array
给出了2段代码c和java:
1.随机数插入数组中。
2.sum统计相加 。

c 结果不sort 需要21秒,排序后7秒。
java  5秒。
问题在哪里? 



分支预测资料: 

Hidden Features and Dark Corners of C++/STL 

http://comp.lang.cpp.moderated.narkive.com/oZn86c9y/hidden-features-and-dark-corners-of-c-stl
http://en.wikipedia.org/wiki/Branch_predictor

http://zh.wikipedia.org/wiki/%E5%88%86%E6%94%AF%E9%A0%90%E6%B8%AC%E5%99%A8

 



posted @ 2015-02-24 21:13 小高 阅读(197) | 评论 (0)编辑 收藏
     摘要: 关闭oracle api 异常侦测 sqlnet.ora

DIAG_ADR_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_RESTRICTED=FALSE
  阅读全文
posted @ 2015-02-05 16:28 小高 阅读(485) | 评论 (0)编辑 收藏

打开root 用户 

http://www.macx.cn/thread-2051799-1-1.html  
http://support.apple.com/zh-cn/HT1528

太难找了,竟然在菜单里,打开root 。 

su root 
whoami

sudo su
密码不对

Mac OS X:sudo 命令需要非空的管理员密码





posted @ 2015-01-31 13:14 小高 阅读(258) | 评论 (1)编辑 收藏
c# oledb odbc  foxpro driver win 64 驱动不兼容. 
解决办法:
c#工程里面选择 x86. 
安装foxpro odbc驱动.  
posted @ 2015-01-30 14:37 小高 阅读(205) | 评论 (0)编辑 收藏

Intellij IDEA和Android Studio默认使用JDK6,所以你有如下选择:

1,安装JDK6

2,安装其他版本的JDK,然后修改IDE的指向。

如果选择2,那么修改方式为:

打开应用的.app包,然后在Contents这个目录下,有个文件info.plist,修改JVMVersion这个key对应的value,从1.6*修改为你安装的版本即可。


1 用文本编辑器打开
/Applications/IntelliJ IDEA 13.app/Contents/Info.plist

2 搜索JVMVersion,将其值改为1.7*

3 再次运行应用即可看到应用成功运行

from :
http://www.zhihu.com/question/26086376


posted @ 2015-01-29 23:02 小高 阅读(424) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-01-05 10:43 小高 阅读(181) | 评论 (0)编辑 收藏
     摘要: 分析表空间
execute dbms_stats.gather_schema_stats('CORE');   阅读全文
posted @ 2015-01-04 18:03 小高 阅读(241) | 评论 (0)编辑 收藏
     摘要: 1.种方法
#define WIN32_LEAN_AND_MEAN
放在windows.h 之前.

2. 先引入socket2.h文件.

3. 项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义
在其中添加 : WIN32_LEAN_AND_MEAN  阅读全文
posted @ 2015-01-04 15:16 小高 阅读(906) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2015-01-01 21:08 小高 阅读(512) | 评论 (0)编辑 收藏
     摘要: 中间件  阅读全文
posted @ 2015-01-01 17:31 小高 阅读(244) | 评论 (0)编辑 收藏

linux DNS 设置 

sudo vim /etc/resolv.conf

http://www.alidns.com/setup/#linux

wget http://www.alidns.com/static/soft/SetAliDNS.sh -O SetAliDNS.sh && chmod +x SetAliDNS.sh && sudo ./SetAliDNS.sh

卸载

sudo ./SetAliDNS.sh restore



键盘修改 

xmodmap -e  "keycode 105=Delete"



posted @ 2015-01-01 13:39 小高 阅读(170) | 评论 (0)编辑 收藏

 

 

API对设计流程的影响——Joshua Bloch访谈

http://blog.sina.com.cn/s/blog_6310e0b20100o7cv.html 

 

工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】

http://www.csdn.net/article/2014-02-18/2818441-How-to-design-a-good-API

 
《Effective Java》: Joshua Bloch访谈

http://eastsun.iteye.com/blog/195861

posted @ 2014-12-19 13:23 小高 阅读(211) | 评论 (0)编辑 收藏

 

The Java™ Tutorials

http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

 

1.5

New Features and Enhancements J2SE 5.0

http://docs.oracle.com/javase/1.5.0/docs/relnotes/features.html

Experiences with the New Java 5 Language Features

Pages: 1, 2, 3, 4

 

1.6

Highlights of Technology Changes in Java SE 6

http://www.oracle.com/technetwork/java/javase/features-141434.html

 

1.7

Highlights of Technology Changes in Java SE 7

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

 

http://www.javacodegeeks.com/2014/05/java-8-features-tutorial.html

posted @ 2014-12-17 17:19 小高 阅读(241) | 评论 (0)编辑 收藏

学习步骤
1.c 
2.c object 
3. stl
4. linux os api
5. socket  
6. 分布式
7. web html5 
8. mac UI  
9. obj c
10.算法。


一些想法:
微博上关注的人很多淘宝系的很多都不搞技术了,原因是阿里上市了,足够的钱退休了,还有些人离职去创业了,
可能氛围比较好,看来创业的都有滋有味。大规模的系统搞过了,心里有底气了,知道方向,估计成功率也会比较高。
一些人技术人靠知乎刷存在感,靠名气说话 。
一些2流技术角色投稿文章csdn,写专题blog。很多毫无营养。
国内的技术书,还是一如既往类似官方教程的翻译版。

 

blog

http://preshing.com/ 

 

Jeff Atwood 大stackoverflo

http://blog.codinghorror.com/

https://github.com/coding-horror

 

陈皓

http://coolshell.cn/ 

 

云风

http://blog.codingnow.com/ 

 

何_登成

http://weibo.com/2216172320/BcUmvbyvW?type=repost#_rnd1418722416088

 

http://ifeve.com/

 

http://www.importnew.com/14105.html

 

网络教学:

http://www.codecademy.com/

 

PLSQL

http://plsql-tutorial.com/plsql-functions.htm

posted @ 2014-12-17 10:55 小高 阅读(270) | 评论 (0)编辑 收藏

 

先确保执行这个. win7 以上才支持 WER windows error report 功能 .

windows 弹出提示框, 然后进程管理器,右键手工导出也行.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="c:\\"
"DumpCount"=dword:00000030
"DumpType"=dword:00000002
"CustomDumpFlags"=dword:00000000

c++ debug版本 + pdb文件

另外需要注意不是所有情况都生成core.

windows 改了注册表不生成core的原因:

Requirements and limitations

· Debugging dump files of optimized code can be confusing. For example, compiler inlining of functions can result in unexpected call stacks and other optimizations might change the lifetime of variables.

· Dump files from 64-bit machines must be debugged on an instance of Visual Studio that is running on a 64-bit computer.

· In versions of Visual Studio before VS 2013, dumps of 32-bit apps that were run on 64-bit machines that were collected by some tools (such as Task Manager and 64-bit WinDbg) could not be opened in Visual Studio. This limitation has been removed in VS 2013.

· Visual Studio can debug dump files of native apps from ARM devices. Visual Studio can also debug apps dump files of managed apps from ARM devices, but only in the native debugger.

· To debug kernel-mode dump files in Visual Studio 2013, download the Windows 8.1 Version of Debugging Tools for Windows. See Kernel Debugging in Visual Studio.

· Visual Studio can't debug dump files saved in the older dump format known as a full user-mode dump. Note that a full user-mode dump is not the same a dump with heap.

· To debug with the SOS.dll (SOS Debugging Extension) in Visual Studio, you must install the Debugging Tools for Windows that is part of the Windows Driver Kit (WDK). See Windows 8.1 Preview: Download kits, bits, and tools.

 

参考:

Collecting User-Mode Dumps   --注册表

http://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx

 

Crash Dump Analysis  --- c++ 自己生成dump

http://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx 

 

Use Dump Files to Debug App Crashes and Hangs in Visual Studio

http://msdn.microsoft.com/en-us/library/d5zhxt22.aspx#bkmk_requirements_and_limitations

 

Attach to Running Processes with the Visual Studio Debugger

http://msdn.microsoft.com/en-us/library/3s68z0b3.aspx

Just-In-Time Debugging in Visual Studio  ------- 还没看

http://msdn.microsoft.com/en-us/library/5hs4b7a6.aspx

posted @ 2014-12-17 10:44 小高 阅读(660) | 评论 (0)编辑 收藏

The Discipline and Method Architecture for Reusable Libraries (2000)



Citations

1489The C++ Programming Language - Stroustrup - 1991
1437Object-Oriented Software Construction - Meyer - 1997
861Design Patterns - Gamma, Helm, et al. - 1995
303Purify: Fast detection of memory leaks and access errors - Hastings, Joyce - 1991
232Rational design process: how and why to fake it - Parnas, Clements - 1986
118The Art of Computer Programming, Volume 1 - Knuth - 1998
89Scalable software libraries - Batory, Singhal, et al. - 1993
67The Library Scaling Problem and the Limits of Concrete Component Reuse - Biggerstaff - 1994
57Algorithm-oriented generic libraries - Musser, Stepanov - 1994
47Vmalloc: A general and efficient memory allocator - Vo - 1996
37Algorithms, 2nd edition - Sedgewick - 1988
30An Empirical Study of Delta Algorithms - Hunt, Vo, et al. - 1996
27Empirical measurements of six allocation-intensive C programs - Zorn, Grunwald - 1992
19Porting Unix to Windows NT - Korn
19Xept: A software instrumentation method for exception handling - Vo, Wang, et al. - 1997


18Worst case fragmentation of first fit and best fit storage allocation strategies - Robson - 1977
17libg++, the GNU C++ library - Lea - 1988
13On the external storage fragmentation produced by first-fit and best-fit allocation strategies - Shore - 1975
11C Interfaces and Implementation - Hanson - 1997
10National Standard for Information Systems { Programming Language C. Technical Report X3J11/89{159, ANSI Accredited Standards Committee, X3 Information Processing Systems - American - 1989
9Ksh - an extensible high level language - Korn - 1994
7Associative arrays - Koenig - 1988
5CDT: A Container Data Type Library - Vo - 1997
5Making a vector Fit for a Standard - Stroustrup - 1994
4Vdelta: Differencing and Compression - Korn, Vo - 1995
4Kiem-Phong Vo. Principles for Writing Reusable Library - Fowler, Korn - 1995
3Practical Reusable Unix Software - Krisnamurthy - 1995
2Negotiated Interfaces for Software Reuse - Clements, Parnas, et al. - 1992
1Concrete software libraries - Vo - 1998
1Sfio: A Buffered I/O Library. Software---Practice and Experience - Fowler, Korn, et al. - 199




posted @ 2014-08-26 13:36 小高 阅读(404) | 评论 (1)编辑 收藏


#include <sys/stat.h>
long file_length(char *f)
{
    struct stat st;
    stat(f, &st);
    return st.st_size;
}


If you have the file stream (FILE * f):
fseek(f, 0, SEEK_END); // seek to end of file
size = ftell(f); // get current file pointer
fseek(f, 0, SEEK_SET); // seek back to beginning of file
// proceed with allocating memory and reading the file
Or,
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
fd = fileno(f); 
struct stat buf;
fstat(fd, &buf);
int size = buf.st_size;
Or, use stat, if you know the filename:
#include <sys/stat.h>
struct stat st;
stat(filename, &st);
size = st.st_size;
posted @ 2014-08-08 16:00 小高| 编辑 收藏

 

 

relocation error: multiget: symbol _Z23wxHandleFatalExceptionsb, version WXU_2.8 not defined in file libwx_baseu-2.8.so.0

 

下载地址:

http://www.codeblocks.org/downloads/26 

http://sourceforge.net/projects/codeblocks/files/Binaries/13.12-RC1/Linux%20(64bit)/

codeblocks-13.12-1.el5.x86_64.tar.bz2

 

安装的关键

Note: On RedHat/CentOS 5 and older revisions of 6 (up to 6.2 as far as I know) you need to add repoforge (former rpmforge) to your repolist, to be able to install the needed wxGTK-package. Seehttp://repoforge.org/use for an instruction.

 

更新yum的源 很重要

http://repoforge.org/use/  下载对应的rpm

cat /etc/redhat-release

uname –a

 

wget http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

rpm -ivh package-filename

 

# yum install gcc
# yum install gcc-c++
如果之前失败过  yum erase wxGTK
# yum install wxGTK
 
然后
 ]# ls
codeblocks-12.11-1.el6.i686.rpm
codeblocks-contrib-12.11-1.el6.i686.rpm
codeblocks-contrib-devel-12.11-1.el6.i686.rpm
codeblocks-devel-12.11-1.el6.i686.rpm
# rpm -ivh codeblocks*
 

1. 下载repo文件
    下载地址:http://mirrors.163.com/.help/CentOS6-Base-163.repo

2. 备份并替换系统的repo文件
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost ~]# mv CentOS-Base.repo CentOS-Base.repo.bak
[root@localhost ~]# mv /root/CentOS6-Base-163.repo CentOS-Base.repo

3. 执行yum源更新
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@localhost ~]# yum update

 

yum install gcc gcc-g++ autoconfig automake 
 
 
参考:
http://blog.csdn.net/dupei/article/details/6428346
 
http://www.cnblogs.com/magialmoon/archive/2013/05/05/3061108.html
 
 
 
 
posted @ 2014-07-19 12:17 小高 阅读(234) | 评论 (0)编辑 收藏

sqlplus 外面执行正常.

tomcat调用老有问题.多调用几次久正常.

 

可能是包中的全局变量引起的.

 

 

If so, that's because your package is stateful:

The values of the variables, constants, and cursors that a package declares (in either its specification or body) comprise its package state. If a PL/SQL package declares at least one variable, constant, or cursor, then the package is stateful; otherwise, it is stateless.

When you recompile the state is lost:

If the body of an instantiated, stateful package is recompiled (either explicitly, with the "ALTER PACKAGE Statement", or implicitly), the next invocation of a subprogram in the package causes Oracle Database to discard the existing package state and raise the exception ORA-04068.

After PL/SQL raises the exception, a reference to the package causes Oracle Database to re-instantiate the package, which re-initializes it...

You can't avoid this if your package has state. I think it's fairly rare to really need a package to be stateful though, so you should revisit anything you have declared in the package, but outside a function or procedure, to see if it's really needed at that level. Since you're on 10g though, that includes constants, not just variables and cursors.

But the last paragraph from the quoted documentation means that the next time you reference the package in the same session, you won't get the error and it will work as normal (until you recompile again).

 

existing state of packages has been discarded means, that your Package had some sort of state.

This is caused by a global variable (or constant) stored in your Package Body.

Since the package has already been used in your session, Oracle assumes that this state is relevant for you. Some of these variables might have different values now, and when you recompile the Body, the values are reset.

This exception is thrown, so that your clients know that they can't rely on those variables any more.

You could try to remove all global variables and constants from the Package Body, or close your session and reconnect before calling the package again.

 

 

参考:

http://stackoverflow.com/questions/2502722/pl-sql-package-invalidated

 

http://stackoverflow.com/questions/19376440/ora-06508-pl-sql-could-not-find-program-unit-being-called

posted @ 2014-07-16 21:14 小高 阅读(1640) | 评论 (0)编辑 收藏

监听器配置少了.

lsnrctl

 

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = XE )
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (SID_NAME =XE )
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

posted @ 2014-07-11 10:07 小高 阅读(301) | 评论 (0)编辑 收藏

 

1.安装 vnc-server

找包

http://www.rpmfind.net/linux/rpm2html/search.php?query=libtermcap&submit=Search+...&system=centos&arch=

如果window

 

vncserver :1

输入密码

vnc登录后

xhost +

解决display问题.

vncserver -kill :1

 

vnc 如果进入以后3个 提示选择 allow clipboard  .

修改/root/.vnc/xstartup文件,把最后一行 twm& 修改成"startkde &" 或者"gnome-session &"

不然的话连接linux时只出现了一个终端编辑器窗口。

 

exec gnome-session &

 

 

 

 

 

oracle 安装

http://blog.itpub.net/7719012/viewspace-1139996

http://lowendtalk.com/discussion/5396/how-to-install-vnc-on-centos

 

 

二:使用Xmanager实现xhost挂接图形

http://hi.baidu.com/hanyanlovejoy/item/564ed582accef0efe496e017

posted @ 2014-07-10 12:53 小高 阅读(152) | 评论 (0)编辑 收藏

删除

:g/.*ABC/m

:g/kernel32/d

:[range]g[lobal]/{pattern}/[cmd] :help :g

vim 查找一个文章段落, 开头字符 结尾字符

/.*#tag1\(.\+\n\+\)\{-}#tag2.*

 

删除掉 :

g/.*#tag1\(.\+\n\)\{-}#tag2.*/d

这句话\(.\+\n\+\) 采用分组

.\+  .任意字符 + 一个或多个

\n\+  回车  一个或多个

\+1 或更多

\{-} 0 或更多尽可能少. 任意字符

\n 换行符

为什么  /This\_.*text/ 不可以,因为\_. 是全缓冲区匹配模式的.

 

概念分组、捕获

http://i.linuxtoy.org/docs/guide/ch26s08.html#id3120909

abc123.456.def

\d{3}表示三个数字,(\d{3}\.)表示三个数字加“.”为一组,{2}表示这一组内容重复两次

 

 

 

参考:

http://vimcdoc.sourceforge.net/doc/pattern.html#search-pattern

^\(.\+\n\)\{-}#.*tag1

http://stackoverflow.com/questions/10076834/multi-line-regex-in-vim-filtering-out-blocks-of-text-in-a-file

Vim 中删除符合条件的行

http://timothyqiu.com/archives/delete-lines-matching-pattern-in-vim/ https://github.com/railsinstaller/railsinstaller-windows/releases

posted @ 2014-06-25 14:24 小高 阅读(180) | 评论 (0)编辑 收藏

 

源码

https://github.com/embedthis/goahead/blob/master/src/utils/gopass.c

goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中

http://blog.csdn.net/reille/article/details/6784809

goAhead上实现文件上传到嵌入式web服务器上

http://www.xuebuyuan.com/625754.html

 

3. 资料

3.1 http://blog.csdn.net/reille/article/details/6871827 本博客转载的文章

3.2
http://www.hackchina.com/r/57970/v2.1.1-_-web-_-upload.htm__html
   前端实现参考

3.3

http://www.hackchina.com/r/57970/v2.1.1-_-LINUX-_-upldForm.c__html 服务器端实现参考

posted @ 2014-06-20 11:01 小高 阅读(235) | 评论 (0)编辑 收藏

 

RiskUnit0001.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
obj/Debug/src/RiskUnit0001/RiskUnit0001.o: could not read symbols: Bad value

 

为什么需要

 

解决办法编译器已经提示了:recompile with -fPIC
但是我们应该重新编译谁带上这个参数呢?经过我几番折腾,发现如下情况:
1、编译.o文件的时候,没有加参数-fPIC,这问题个在gcc version 3.4.6版本没有发生,可能那个编译器默认都给加上吧。
2、当前程序中有用到某个静态库,那个静态库编译.o文件的时候没有加上-fPIC(静态库其实就是.o文件打包)。补充一点:我发现手写Makefile时即使不加-fPIC也没有这个问题,这一点很郁闷,这个只在用automake工具编译出.a文件时才出现过。
知道原因了,解决办法自然有了,保证你编译.o文件的时候,都加上-fPIC,这样你才能编译出动态库来。

 

引用

http://hi.baidu.com/duizhe_memory/item/c4ccbb0831a5998d3d42e212

posted @ 2014-04-18 11:15 小高 阅读(324) | 评论 (0)编辑 收藏

 

 

sqlplus "core/core@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.75.1)(Port=1521))(CONNECT_DATA=(SID=itmp)))"


sqlplus core/core@192.168.75.1:1521/itmp

 

参考一个 :

 

 

/***
*    ORACLE客户端liunx安装部署说明
*
*/

配置步骤:

1,将本文件夹拷贝到相应的服务器上。
2,配置环境变量如下: 文件夹所在路径(/kfts/tools/oracle)
(永久修改方式)
vi /etc/profile
在文件最后添加:
export LD_LIBRARY_PATH=/kfts/tools/oracle:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_HOME=/kfts/tools/oracle/
export PATH=/kfts/tools/oracle/:$PATH
export TNS_ADMIN=/kfts/tools/oracle/network/admin

之后运行命令生效:
source /etc/profile

posted @ 2014-04-12 11:19 小高 阅读(1836) | 评论 (0)编辑 收藏

 

 

relocation error: multiget: symbol _Z23wxHandleFatalExceptionsb, version WXU_2.8 not defined in file libwx_baseu-2.8.so.0

 

下载地址:

http://www.codeblocks.org/downloads/26 

http://sourceforge.net/projects/codeblocks/files/Binaries/13.12-RC1/Linux%20(64bit)/

codeblocks-13.12-1.el5.x86_64.tar.bz2

 

安装的关键

Note: On RedHat/CentOS 5 and older revisions of 6 (up to 6.2 as far as I know) you need to add repoforge (former rpmforge) to your repolist, to be able to install the needed wxGTK-package. Seehttp://repoforge.org/use for an instruction.

 

更新yum的源 很重要

http://repoforge.org/use/  下载对应的rpm

cat /etc/redhat-release

uname –a

rpm -ivh package-filename

 

# yum install gcc
# yum install gcc-c++
如果之前失败过  yum erase wxGTK
# yum install wxGTK
 
然后
 ]# ls
codeblocks-12.11-1.el6.i686.rpm
codeblocks-contrib-12.11-1.el6.i686.rpm
codeblocks-contrib-devel-12.11-1.el6.i686.rpm
codeblocks-devel-12.11-1.el6.i686.rpm
# rpm -ivh codeblocks*
 
yum install gcc gcc-g++ autoconfig automake 
 
 
参考:
http://blog.csdn.net/dupei/article/details/6428346
 
http://www.cnblogs.com/magialmoon/archive/2013/05/05/3061108.html
 
 
 
 
posted @ 2014-04-11 16:19 小高 阅读(1458) | 评论 (1)编辑 收藏
     摘要:   阅读全文
posted @ 2013-10-21 11:10 小高 阅读(277) | 评论 (0)编辑 收藏

 

目标缓冲区 小于 实际缓冲区

 

char *name = "1234567890";
char name2[6]={0};

memcpy_s( name2 ,  sizeof(name2) ,  name, strlen(name));

动态执行失败 (DEBUG ASSERTION FAILED !) 运行库和调试库都会提示出错.

 

注意:    指针sizeof( 指针 ) = 4  

strncpy(name2,name ,sizeof(name) );             打印name2  1234 

 

strncpy(name2,name ,strlen(name) );            打印name2   123456IOIPNUUY

优化这个语句,尽量拷贝内容

strncpy(name2,name ,   strlen(name)>sizeof(name2)? sizeof(name2): strlen(name)   );

 

 

目标缓冲区 小于 实际缓冲区

strncpy(name2,name ,sizeof(name2)-1 );

sizeof(name2)-1 ------------>让最后一个name2字符留给\0 否则这个字符也被拷贝了.

 

 

 

看一下LINUX下的两个函数的源代码,印象会更加深刻一些
void * memcpy(void * dest,const void *src,size_t count)
{
    char *tmp = (char *) dest, *s = (char *) src;
    while (count--)
        *tmp++ = *s++;
    return dest;
}
char * strcpy(char * dest,const char *src)
{
    char *tmp = dest;
    while ((*dest++ = *src++) != '\0')
        /* nothing */;
    return tmp;
}
老实讲,这两个函数长得是很帅

 

 

参考

http://stackoverflow.com/questions/4593907/difference-between-strncpy-and-memcpy

 

http://www.cppblog.com/Tim/archive/2011/04/02/143259.aspx

posted @ 2013-09-18 00:12 小高 阅读(455) | 评论 (0)编辑 收藏

 

Visual Studio 2008 命令提示

cl /EHsc simple.cpp

 

参考:

http://msdn.microsoft.com/zh-cn/library/ms235639(v=vs.90).aspx 

http://msdn.microsoft.com/zh-cn/library/1370z17c.aspx

 

 

 

Visual C++ 示例应用程序

Visual Studio 2008

其他版本


通用示例

包含一些示例,这些示例可以在 Visual C++ 的所有版本(包括 Visual C++ 速成版)中使用。

Visual C++ 2008 中的演练

包含一些演练链接,这些演练重点演示了 Visual C++ 的功能。

STL 示例

包含演示标准模板库功能的一些示例。

ATL 示例

包含演示活动模板库 (ATL) 功能的一些示例。

编译器 COM 支持示例

包含一些示例,这些示例演示 Visual C++ 编译器对 COM 的内置支持。

自定义向导示例

包含一些示例,这些示例说明如何创建您自己的向导来优化与创建自定义应用程序或添加代码相关的任务。

事件处理示例

包含一些示例,这些示例演示 Visual C++ 中的事件处理。

扩展性

包含一些示例,这些示例演示如何扩展 Visual Studio 和 Visual C++。

国际示例

包含一些示例,这些示例演示如何针对国际市场编写代码。

互操作性示例

包含一些示例,这些示例演示 COM 和 .NET Framework 之间的互操作性。

MASM 示例

包含一些示例,这些示例演示 Visual C++ 中的 Microsoft Macro Assembler (MASM) 源文件支持。

MFC 示例

包含一些示例,这些示例演示 Microsoft 基础类 (MFC) 功能。

Windows SDK 示例

包含一个示例,此示例演示 Windows 图像获取 (WIA) 应用程序编程接口 (API)。

 

 

互操作性示例

http://msdn.microsoft.com/zh-cn/library/wd6032c3.aspx

 

标准模板库示例

http://msdn.microsoft.com/zh-cn/library/f1dtts6s.aspx

posted @ 2013-09-15 00:27 小高 阅读(736) | 评论 (0)编辑 收藏

 

warning MSB8012: TargetPath(C:\dev\APPFF_SQ2\APP\.\Release\APP_SQ1.exe) 与 Linker 的 OutputFile 属性值(C:\dev\APPFF_SQ2\APP\Release\MDU2FF_SQ.exe)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。

warning MSB8012: TargetName(MDU2FF_SQ1) 与 Linker 的 OutputFile 属性值(MDU2FF_SQ)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
1>  MD .vcxproj -> C:\dev\APPFF_SQ2\APP\.\Release\ .exe

 

project name 修改名字.

另外工程配置,链接生成--->输出文件统一.

posted @ 2013-09-12 14:51 小高 阅读(1285) | 评论 (0)编辑 收藏
posted @ 2013-09-12 14:09 小高 阅读(306) | 评论 (0)编辑 收藏
     摘要:   一般来说,如果你不是MFC工程,需要引用HANDLE的话, 最好自己将其类型改为void*,比如,你本来变量的类型为HANDLE, 你把它改为void*就可以了。   --------------------------------------------------------------------------------    ...  阅读全文
posted @ 2013-09-10 14:14 小高 阅读(530) | 评论 (0)编辑 收藏

1、工作空间默认
 
Windows -> Preferrences -> C/C++ -> Editor -> Documentation tool comments
 
默认为none,修改为Doxygen即可
 
2、工程特别属性
如果不想设置为整个工作空间的默认属性,可以在工作属性对话框的这里找到:
 
Project -> Properties -> C/C++ General -> Enable project specific settings
 
选择Doxygen即可
 
备忘

posted @ 2013-09-10 14:03 小高 阅读(266) | 评论 (0)编辑 收藏

发生在析够函数中,   vs2010 debug 模式 .

CriticalSection::~CriticalSection(void){
    DeleteCriticalSection(&m_CritSect); 
}

 

我开始推测,必须退出section才能delete ?

    InitializeCriticalSection(&m_CritSect);  
      EnterCriticalSection(&m_CritSect); 
    DeleteCriticalSection(&m_CritSect);   
  实际上这样退出是可以的.

 

问题在哪里? 

一个回调处理函数类注册到另外一个线程里面.另外一个线程一直有消息推送或者调用其内部函数.

 

~主类(){

       aa->release(); //之前没有这句话 ,内部aa 线程一直在运行 ,可能是排在析构 (DeleteCriticalSection)之后或者之前,损坏了这个变量 m_CritSect

}

这里开始调用  DeleteCriticalSection(&m_CritSect);   并且报错了.

posted @ 2013-09-10 13:28 小高 阅读(463) | 评论 (0)编辑 收藏

别的项目里面拿来的 .h .cpp 

因为本项目未使用预编译头.

但是预编译头这个头文件存在,里面东西很多.

导致很多宏  或者 常量重复定义.

posted @ 2013-09-09 23:34 小高 阅读(261) | 评论 (0)编辑 收藏
定义成标准头
int main(int argc, char *argv[])
argv[i]
非标准
int main() {
    PWSTR cmdLine = GetCommandLineW();

    int argc;
    PWSTR *argv = CommandLineToArgvW(cmdLine, &argc);
}

 

 

//参数使用

if (argc==3)
{
    if (strcmp(argv[0], "-e")==0)
    {
        iMode = 1;
    } 
    else if (strcmp(argv[0], "-d")==0)
    {
        iMode =2;
    }
    sInput=argv[1];
    sOutput=argv[2];
}

_tmain 
Unicode下就是wmain
否则就是main

 

[参考]

http://stackoverflow.com/questions/16706632/c-tchar-to-stdstring

posted @ 2013-09-04 16:07 小高 阅读(237) | 评论 (0)编辑 收藏

我老是搞错.

 

boy.h

class Boy

 

boy.cpp

Boy  g_boy;

 

使用全局变量

Collection.h

#include “boy.h”

extern Boy g_boy;

 

似乎更优雅的方式

#ifdef  _BOY__HH__
extern  Boy  g_boy ;
#endif

 

 

错误方式:    定义宏根本解决不了这个问题

boy.h
#pragma once
#ifndef _BOY__HH__
#define _BOY__HH__ 

class  boy

Boy  g_boy;

#endif

编译错误

1> .obj : error LNK2005: "class class 全局变量名 " (?g_CITSCache@@3VMarketCache@@A) 已经在 XXX.obj 中定义
1>  正在生成非 SAFESEH 映像。
1>D:\XXX.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

 

等我看了编译原理再来解释.

 

如何防止循环引用?

A->b->c->A

posted @ 2013-09-04 09:35 小高 阅读(324) | 评论 (0)编辑 收藏

一直报错,说找不到引用.

2>Quote.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall 某类::某类(char *)" (??0某类@@QAE@PAD@Z),该符号在函数 "public: __thiscall Quote::Quote(void)" (??0Quote@@QAE@XZ) 中被引用
2>Quote.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall 某类::Init(void)" (?Init@某类@@UAE_NXZ)
2>Quote.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall 某类::Kill(void)" (?Kill@某类@@UAEXXZ)
2>Quote.obj : error LNK2001: 无法解析的外部符号 "private: virtual int __thiscall 某类::Run(void)" (?Run@某类@@EAEHXZ)
2>Quote.obj : error LNK2001: 无法解析的外部符号 "private: virtual bool __thiscall 某类::Terminate(void)" (?Terminate@某类@@EAE_NXZ)
2>Quote.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall 某类::~某类(void)" (??1CW

1.使用编译---------> verbose  显示能找到库.

9C[Z)A4`[NZT4PM_%[[$2HB

2.可以看到那个方法连接到那个库文件里面的.

ZH1IBN68EZ@~YHRA@]$EQ61

3.通过depends  看这个dll暴露出来的方法.

C}$1@WQ~CKP%KDAQ9GYSLCK

 

 

 

#ifdef EXPORT_API
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif

class MY_API MyClass {
   ...
};

 

#include <e://testClass.h>

#pragma comment(lib, "//Debug//ServerDLL.lib")

 

 

参考

http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL

 

http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.html

posted @ 2013-09-03 10:15 小高 阅读(518) | 评论 (0)编辑 收藏

 

****取资源

 

      业务代码?

     

***释放资源

posted @ 2013-09-02 20:47 小高 阅读(288) | 评论 (0)编辑 收藏

回头慢慢看.

 

 

 

http://stackoverflow.com/questions/1008019/c-singleton-design-pattern

 

http://blog.yangyubo.com/2009/06/04/best-cpp-singleton-pattern/#id15

 

http://yunli.blog.51cto.com/831344/758684

 

CMake - 优秀的 C/C++ 构建系统

http://blog.yangyubo.com/2008/05/07/cmake-excellent-buildsys/

 

揭示C++中全局类变量的构造与析构顺序

http://yunli.blog.51cto.com/831344/636281

 

http://www.cppblog.com/dyj057/archive/2005/09/20/346.html

posted @ 2013-08-28 13:29 小高 阅读(203) | 评论 (0)编辑 收藏

 

 

  SetBlockMode(false);  // NONBLOCK mode      
 e = connect(m_socket, (struct sockaddr*)&addr, sizeof (addr));  
 if (e<0)       {      
 e = GET_LAST_SOCK_ERROR();  printf(" socket error code = %d \n",e);       
 if ((e==EWOULDBLOCK||e==EINPROGRESS || e == WSAEWOULDBLOCK ) && CheckSendAvailable(waitms)>0)    
 {             e = 0; // 表示连接成功      
  }  
else   {  
           e = -1; // 表示连接失败,或者在等待的时间之内连接失败          }
 
我临时修改。
         if ((e==EWOULDBLOCK||e==EINPROGRESS || e == WSAEWOULDBLOCK ) && CheckSendAvailable(waitms)>0)
 
WSAEWOULDBLOCK  = 10037 
 
 
 
问题找到了。
切换到项目配置。平台工具集---->vs2008   连接win sdk 6的库
切换到项目配置。平台工具集---->vs2012 连接win  sdk  8 的库
有区别。
 
 

E6~A%]$`JD$GI9K]TY[MO~Q

 

正在生成代码...
1>  Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1> 
1>  Copyright (C) Microsoft Corporation.  All rights reserved.
1> 
1> 
1> 
1>  正在搜索库
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\libcpmtd.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\libcpmtd.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
1> 
1>  已完成库搜索
1>  Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1> 
1>  Copyright (C) Microsoft Corporation.  All rights reserved.
1> 
1> 
1>  MDUSJS.vcxproj -> D:\dev\cmd3\cmdsiimdsi\MDUSJS2012\.\Debug\MDUSJS.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

 

平台工具 连接的库不一样。

 

Q__${K)0%R54TA9X8E8EUQJ

 


>  正在生成代码...
1>dbf.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/SAFESEH”规范)
1> 
1>  正在搜索库
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1> 
1>  已完成库搜索
1> 
1>  正在搜索库
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
1> 
1>  已完成库搜索
1>  MDUSJS.vcxproj -> D:\dev\cmd3\cmdsiimdsi\MDUSJS2012\.\Debug\MDUSJS.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

 

 

 

 

 

 

 
 
 

参考:

ms connect

http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625(v=vs.85).aspx

 

ioctlsocket function 控制柱塞非柱塞

http://msdn.microsoft.com/en-us/library/windows/desktop/ms738573(v=vs.85).aspx

 

TCP/IP编程基础——超时、多路复用、非阻塞

 

 

http://blog.csdn.net/s3olo/article/details/8014872

 

 

 

http://developerweb.net/viewtopic.php?id=7246

 

 

代码 windows  tcp 通过select方式实现 connect non block

http://bbs.csdn.net/topics/10426810

 

 

 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx

Windows Sockets Error Codes

 

***************

测试模拟工具发送大数据量消息时,发现时而发送成功,时而失败。追踪代码发现,抛出的是一个错误码为10035的socket错误。上网查资料发现这个错误码描述是Service temporarily unavailable.也就是说有可能send的时候遇到socket缓冲区满,无法写入,引起发送失败。

  如果是这样的话,那么这就是一个常规的异常情况,需要对它进行处理,而不是异常退出。

  最后代码改成这个样子,send然后分析返回结果,如果错误,且错误码为10035,那么就重发,直到发成功时,break。

  目前尚不知道,这样改的副作用有没有,反正现在问题暂时解决鸟

***********************************

 

Winsock connect函数返回错误,使用WSAGetLastError得到10035,10037,是什么原因
MSDN注释:
WSAEWOULDBLOCK
10035
Resource temporarily unavailable.
This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
WSAEALREADY
10037
Operation already in progress.
An operation was attempted on a nonblocking socket with an operation already in progress—that is, calling connect a second time on a nonblocking socket that is already connecting, or canceling an asynchronous request (WSAAsyncGetXbyY) that has already been canceled or completed.
网络翻译:
10035—WSAEWOULDBLOCK
资源暂时不可用。对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。比如说,在一个非暂停套接字上调用 connect,就会返回这个错误。因为连接请求不能立即执行。
10037—WSAEALREADY
操作已完成。一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。比如,在一个已处于连接进程的非锁定套接字上,再一次调用 connect 或 WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的 Winsock函数)的进程中时,也会出现这个错误。
我描述下问题:使用socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);创建一个TCP/IP套接字,然后创建一个线程,不停地用connect函数进行链接,直到链接成功,才退出线程,问题来了,connect函数它有时候返回成功,有时候又返回错误,用WSAGetLastError得到享受10035, 10037这两种错误值,我将错误值打印出来,结果是:10035,10035,10037,10037,10037,10037,10037.......,10037。

****************************************************************

 

 

 

 

WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET){return 0;}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}

 

 

 

//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}

 

------------------------------------------

 

 

// Socket中如何设置连接超时
// AntGhazi/2001.12.14 主页:antghazi.yeah.net
/*
把CSDN与中文yahoo翻了底朝天, 也没找到如何设置socket的连接超时的满意方法, 问此问题的兄弟已有一大堆,
这里偶就讲一下win下如何设置socket的connect超时. 设置connect的超时很简单, CSDN上也有人提到过使用select,
但却没有一个令人满意与完整的答案. 偶所讲的也正是select函数, 此函数集成在winsock1.1中, 简单点讲,"作用使
那些想避免在套接字调用过程中被锁定的应用程序, 采取一种有序的方式, 同时对多个套接字进行管理"
(<<Windows网络编程技术>>原话). 使用方法与解释请见《Windows网络编程技术》.
在使用此函数前, 需先将socket设置为非锁定模式, 这样, 在connect时,才会立马跳过,
同时, 通常也会产生一个WSAEWOULDBLOCK错误,这个错误没关系. 再执行select则是真正的超时.
*/
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(WSAStartup(MAKEWORD(2,0),&wsd))
{
return 0;
}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET)
{
return 0;
}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr.s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE)
{
return 0;
}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec = 0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR)
{
::closesocket (cClient);
return 0;
}
/////////////////////////////////////////////////////////////////
以前我从csdn上找到的,注意如果调用connect返回SOCKET_ERROR,那么你要调用 WSAGetLastError(),看错误是不是WSAEWOULDBLOCK,如果是,则忽略,否则是真的出错了。

 

 

 

-------------------------------------------------------------

 

 

这个应该是可以用的,因为我用过,我的代码是这样的,供你参考
LPHOSTENT ScanIPAddr(DWORD dwIP)
{
SOCKET sock = INVALID_SOCKET;
LPHOSTENT lphost = NULL;
SOCKADDR_IN server;
u_long ul = 1;
struct timeval timeout ;
fd_set r;
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = _nPort;
server.sin_addr.s_addr = htonl((u_long)dwIP);
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock == INVALID_SOCKET)
return NULL;
//设置非阻塞方式连接
if(ioctlsocket(sock, FIONBIO, (u_long*)&ul)==SOCKET_ERROR)
return NULL;
if(0 != connect(sock, (SOCKADDR*)&server, sizeof(server)))
{
if(WSAGetLastError() != WSAEWOULDBLOCK)
{
closesocket(sock);
return NULL;
}
}
//select 模型,即设置超时
FD_ZERO(&r);
FD_SET(sock, &r);
timeout.tv_sec = 0; //连接超时0秒
timeout.tv_usec = 700;
if(select(0, 0, &r, 0, &timeout) <= 0)
{
closesocket(sock);
return NULL;
}
lphost = gethostbyaddr((const char *)&(server.sin_addr), 4, AF_INET);
closesocket(sock);
return lphost;
}

 

 

 

-----------------------------------------------------------------------------

 

 

 

下面是我的实现代码:
char sBuf[2048];
    int i;
int iSRTimeOut = 6000;
    u_long arg=1;
    rc4_key key;
    int r;
    struct sockaddr_in sockaddr; 
    sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (sock==INVALID_SOCKET)
{
        r=WSAGetLastError();
    closesocket(sock);
    sprintf(sBuf,"Winsock Error:%d",r);
    return Error(_T(sBuf));
}
//设置接收超时6000毫秒
    if(setsockopt(sock,IPPROTO_TCP,SO_RCVTIMEO,(const char FAR*)&iSRTimeOut,sizeof(int))==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
//return Error(_T(sBuf));
}
//设置发送超时6000毫秒
    if(setsockopt(sock,IPPROTO_TCP,SO_SNDTIMEO,(const char FAR*)&iSRTimeOut,sizeof(int))==SOCKET_ERROR)
    {
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
//return Error(_T(sBuf));
}
//设置非阻塞连接方式
unsigned long ul = 1;
    r = ::ioctlsocket(sock, FIONBIO, (unsigned long*)&ul);
    if(r==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket(sock);
sprintf(sBuf,"Winsock Error:%d",r);
// return Error(_T(sBuf));
}
//进行连接操作
    switch (m_ProxyType)
    {
case 0:
       sockaddr.sin_addr.s_addr=inet_addr(m_SvrAddr);
   sockaddr.sin_port=htons((unsigned short)m_SvrPort);
   break;
    default:
       sockaddr.sin_addr.s_addr=inet_addr(m_ProxyAddr);
   sockaddr.sin_port=htons((unsigned short)m_ProxyPort);
   break;
    }
    sockaddr.sin_family=AF_INET;
    memset(sockaddr.sin_zero,0,8);
   int iReturn;
    connect(sock,(struct sockaddr*)&sockaddr,sizeof(struct sockaddr_in));
iReturn = ConnectedReady(sock);// 连接延时
if(iReturn == 0)
{
return Error(_T("Connect TimeOut!"));
}
if(iReturn >1)
{
sprintf(sBuf,"Winsock Error:%d",iReturn);
return Error(_T(sBuf));
}
//设置回阻塞模式
unsigned long ul1= 0 ;
    r = ioctlsocket(sock, FIONBIO, (unsigned long*)&ul1);
    if(r==SOCKET_ERROR)
{
r=WSAGetLastError();
closesocket (sock);
sprintf(sBuf,"Winsock Error:%d",r);
return Error(_T(sBuf));
}
说明:进行setsockopt、设置非阻塞模式、一直到最后设置回阻塞模式,都有错误码返回!
功能描述:本来我的程序就是要实现:自己定义一个timeout值,在网络不通或阻塞时,客户端调用connect,最长等待timeout秒。
msn:himming@hotmail.com

 

---------------------------------------------------------------------

http://www.cnblogs.com/BloodAndBone/archive/2012/05/22/2513338.html

 

 

windows下设置socket的connect超时

变相的实现connect的超时,我要讲的就是这个方法,原理上是这样的:
1.建立socket
2.将该socket设置为非阻塞模式
3.调用connect()
4.使用select()检查该socket描述符是否可写(注意,是可写)
5.根据select()返回的结果判断connect()结果
6.将socket设置为阻塞模式(如果你的程序不需要用阻塞模式的,这步就省了,不过一般情况下都是用阻塞模式的,这样也容易管理)

复制代码

// widonws: 默认设置socket TCP client connect为阻塞模式
void TcpConnect(char* strIP, UINT nPort)
{
    struct sockaddr_in serverAddress;
    SOCKET hSocket = NULL;

    hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if( hSocket==INVALID_SOCKET)
    {
        return;
    }

    memset(&serverAddress, 0, sizeof(serverAddress));     
    serverAddress.sin_family      = AF_INET;
    serverAddress.sin_addr.s_addr = inet_addr(strIP);   
    serverAddress.sin_port        = htons((short)nPort);      
    int iTimeOut = 3000;
    setsockopt(hSocket,SOL_SOCKET,SO_RCVTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));
    setsockopt(hSocket,SOL_SOCKET,SO_SNDTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));    

    if( SOCKET_ERROR==connect(hSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) )
    {        
        closesocket(hSocket);
        DWORD gle = WSAGetLastError();

        return;
    }

    char buff[] = "hello";
    int sl=::send(hSocket,(char*)buff, sizeof(buff), 0);
    if( sl<0 )
    {
        closesocket(hSocket);
        return ;
    }
    closesocket(hSocket);
}

// widonws: 设置socket TCP client connect非阻塞模式
void SockSelect(char* strIP, UINT nPort)
{
    SOCKET/*int*/ sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(sockfd < 0) 
    {
        return;
    }
    struct sockaddr_in serv_addr;

    //以服务器地址填充结构serv_addr
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr(strIP);
    serv_addr.sin_port = htons(nPort);
    int error = -1;
    int len = sizeof(int);
    timeval tm;
    fd_set set;
    unsigned long ul = 1;
    ioctlsocket(sockfd, FIONBIO, &ul); //设置为非阻塞模式
    bool ret = false;
    if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
    {
        tm.tv_sec  = 3;
        tm.tv_usec = 0;
        FD_ZERO(&set);
        FD_SET(sockfd, &set);
        if( select(sockfd+1, NULL, &set, NULL, &tm) > 0)
        {
            getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char *)&error, /*(socklen_t *)*/&len);
            if(error == 0) 
                ret = true;
            else 
                ret = false;
        } 
        else 
            ret = false;
    }
    else 
        ret = true;
    ul = 0;
    ioctlsocket(sockfd, FIONBIO, &ul); //设置为阻塞模式
    if(!ret) 
    {
        closesocket( sockfd );
        fprintf(stderr , "Cannot Connect the server!/n");
        return;
    }

    fprintf( stderr , "Connected!/n");

    char buff[] = "hello";
    int sl=::send(sockfd,(char*)buff, sizeof(buff), 0);

    closesocket( sockfd );
}

复制代码

分类: c/c++, VC++

posted @ 2013-08-22 18:14 小高 阅读(774) | 评论 (0)编辑 收藏

 

https://www.byvoid.com/blog/c-int64/

 

我要解决的几个问题

 

消费线程 c++

函数调用栈和栈帧 

 

预编译技术要研究一下

http://www.cnblogs.com/cofd/archive/2007/11/05/949962.html

 

编译器-VC6.0全解及调试技巧

http://blog.csdn.net/wscxr57/article/details/8020754

posted @ 2013-08-20 22:42 小高 阅读(235) | 评论 (0)编辑 收藏

1. 简单解决问题的方式是

找cpp  缺少  #include "stdafx.h" 添加。并且使用 《预编译选项》

B8C9~4S35CKEG12DA5W7_ZJ

 

2.被动解决方式

    又分为2种方式

    1.选择排除 lib 再附加lib   nafxcwd.lib    LIBCMTD.lib  附加的顺序不一样来操作。

    2.另外一种简单的做法 在附加lib处添加  nafxcwd.lib

 

使用  Client.lib 会出现问题,libc 和mfc的库冲突问题。

这边可以在编译时加lib参数 nafxcwd.lib。但是我项目本身不使用mfc。

1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义

1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义

1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 libcpmtd.lib(newaop.obj) 中定义

1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义

1>     正在创建库 ..\bin\Service.lib 和对象 ..\bin\Service.exp

1>..\bin\Service.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

1>  正在搜索库

1>      正在搜索 ../lib/CMDClient.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:

1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:

1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:

1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib\uafxcwd.lib:

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义

1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\msimg32.lib:

MSDN 解决问题链接

http://support.microsoft.com/kb/148652/zh-cn

CRT 库对 newdeleteDllMain 函数使用弱外部链接。MFC 库也包含 newdeleteDllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

回到顶端 | 提供反馈

解决方案

该问题有两种解决方法。第一种方法是强制链接器按照正确的顺序链接库。第二种方法是由您亲自查找导致问题的模块并纠正它。
注意 以下步骤基于 Visual C++ 6.0。

解决方案一:强制链接器按照正确的顺序链接库
  1. 在“项目”菜单上,单击“设置”。
  2. 在“项目设置”对话框的“以下项目的设置”视图中,单击以选中出现链接错误的项目配置。
  3. 在“链接”选项卡上,单击以选中“类别”组合框中的“输入”。
  4. 在“忽略库”框中,插入库名(例如,Nafxcwd.lib;Libcmtd.lib)。
    注意:等效的链接器命令行是:/NOD:<library name>
  5. 在“对象/库模块”框中,插入库名。必须确保这些库按顺序列出,而且是行中的前两个库(例如,Nafxcwd.lib 和 Libcmtd.lib)。
要在 Visual C++ .NET 中设置该选项,请阅读“设置 Visual C++ 项目属性”联机帮助主题。
解决方案二:查找导致问题的模块并纠正它
若要查看当前的库链接顺序,请按照下列步骤操作:
  1. 在“项目”菜单上,单击“设置”。
  2. 在“项目设置”对话框的“以下项目的设置”视图中,单击以选中出现链接错误的项目配置。
  3. 在“链接”选项卡上的“项目选项”框中键入 /verbose:lib。
  4. 重新生成项目。在链接过程中,这些库将在输出窗口中列出。

回到顶端 | 提供反馈

状态

这种现象是设计导致的。

回到顶端 | 提供反馈

更多信息

使用 MFC 库时,务必先链接它们,然后再链接 CRT 库。这可以通过确保项目中的每个文件都首先包含 Msdev\Mfc\Include\Afx.h 来完成。

直接包含 (  #include <Afx.h>  ) 或间接包含 (#include <Stdafx.h>) 都可以。Afx.h 包含文件会通过使用 #pragma comment (lib,"<libname>") 指令来强制采用库的正确顺序。
如果源文件的扩展名为 .c,或者该文件的扩展名为 .cpp 但不使用 MFC,则可以创建一个较小的头文件 (Forcelib.h) 并将其放在模块的顶端。这个新的头文件可确保按照正确的顺序搜索库。
Visual C++ 不包含该头文件。要创建此文件,请按照下列步骤操作:

  1. 打开 Msdev\Mfc\Include\Afx.h。
  2. 选定 #ifndef _AFX_NOFORCE_LIBS 和 #endif //!_AFX_NOFORCE_LIBS 之间的行。
  3. 将选定部分复制到 Windows 剪贴板。
  4. 创建一个新文本文件。
  5. 将剪贴板的内容粘贴到这个新文件中。
  6. 将该文件另存为 Msdev\Mfc\Include\Forcelib.h。
在 Visual C++ .NET 中重现问题的步骤
  1. 启动 Microsoft Visual Studio .NET。
  2. 在“文件”菜单上,指向“新建”,然后单击“项目”。
  3. 单击“项目类型”下的“Visual C++ 项目”,然后单击“模板”下的“MFC 应用程序”。
  4. 在“名称”文本框中,键入 Q148652。
  5. 在“位置”文本框中,键入 C:\Test,然后单击“确定”。
  6. 在“MFC 应用程序向导”对话框中,单击“应用程序类型”。
  7. 单击“应用程序类型”下的“基于对话框”,然后单击“MFC 的使用”下的“在静态库中使用 MFC”。
  8. 单击“完成”。
  9. 在“解决方案资源管理器”中,选择“源文件”下的全部三个 .cpp 文件。
  10. 右键单击三个选定的文件,然后单击“删除”。
  11. 右键单击“源文件”,指向“添加”,然后单击“添加新项”。
  12. 单击“模板”下的“C++ 文件”。在“名称”文本框中,键入 Aa。单击“打开”。
  13. 将以下代码粘贴到 Aa.cpp 中:

    int test(){new int; return 1;}
  14. 右键单击“源文件”,指向“添加”,然后单击“添加现有项”。
  15. 选择以下文件:
    • Q148652.cpp
    • Q148652Dlg.cpp
    • stdafx.cpp
  16. 单击“打开”。
  17. 您在第 15 步中选择的文件将出现在“源文件”下。
  18. 选择“源文件”下的全部四个 .cpp 文件。
  19. 右键单击选定的四个 .cpp 文件,然后单击“属性”。
  20. 展开“配置属性”,然后展开“C/C++”。
  21. 单击“预编译头”。
  22. 将“创建/使用预编译头”属性设置为“不使用预编译头”。单击“确定”。
  23. 在“生成”菜单上,单击“重新生成解决方案”。

回到顶端 | 提供反馈

注意:本篇“快速发布”文章是从 Microsoft 支持组织直接创建的。 文中包含的信息按原样提供,用于响应紧急问题。 由于发布仓促,材料可能包含印刷错误,并且可能随时修订,恕不另行通知。 有关其他注意事项,请参阅使用条款

posted @ 2013-08-20 22:26 小高 阅读(2705) | 评论 (0)编辑 收藏

导航

<2013年8月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(3)

随笔分类(352)

收藏夹(19)

关注的blog

手册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜