Visual Studio 2015开发 新功能概述

本文概述

最近在将自己所在的项目升级到VS2015,本文记录和整理了一些在升级VS2015时自己所查阅的一些VS2015新功能资料,随着自己阅读的不断延伸,我会持续更新。这篇日志的主要内容如下所示:

  1. 调试部分: 将介绍一些有助于调试的新功能;
  2. 团队协作部分:主要介绍在VS2015中可以完成的git操作, 可以在VS2015中完成Git flow操作, 下载GitFlow for Visual Studio 2015
  3. 可能会影响编译部分的改动: 在升级旧工程过程中,遇到了一些编译问题,将会把自己遇到的一些问题和相关解决方案做一些介绍,希望能对有类似问题的朋友有所帮助。

1. 调试部分##

1.1 断点设置

VS2015引入了断点设置功能,当鼠标悬浮在断点上时,会出现设置按钮和断点禁用按钮。

在断点设置按钮中,有如下设置:

  • Conditional statement:使用户能够自定义断点触发表达式,只有表达式为true时,触发断点;
  • Hit counts:只有当断点触发累积到一定次数后激活;
  • Filter:只有当触发某个进程、线程或MachineID时触发;
  • Tracepoints: 可设置断点触发时,向日志输出的信息以及是否继续运行断点后续代码。 如图所示:

对下图所示代码



可得到如下结果:



Tracepoints输出可使用伪变量名,其映射关系如下:
Pseudo Variable: Description:
$ADDRESS Current Instruction
$CALLER Previous Function Name
$CALLSTACK Call Stack
$FUNCTION Current Function Name
$PID Process Id
$PNAME Process Name
$TID Thread Id
$TNAME Thread Name

原文介绍链接

1.2 性能分析工具

VS2015中的性能测试工具PerTips,在断点调试时以超链接的方式显示于断点处代码行末尾,提示用户自上一断点到当前断点间的时间估值。如下图所示:
性能分析工具
性能分析工具

如果点击PerTips
则会打开图形诊断工具显示内存和CPU占比信息, 可点击鼠标选择放大或缩小选中区域,查看详细信息。如下图所示:
这些信息将有助于代码性能分析。除断点外,我们还可以在代码行右击鼠标->运行到光标处(Ctrl+F10)来查看性能分析工具。

如需要更多信息请参阅PerTips

1.3 Light Bulbs

VS2015中提供了light bulbs工具用以帮助用户对警告或错误进行快速修复。当VS2015对部分代码在其下方以波浪线标注时,如果用鼠标点击该行或者用鼠标悬浮至波浪线处时,会显示灯泡图标。当用鼠标点击(自测左键或右键点击有效)时,会弹出快速修复提示。可根据提示选项修复可能存在问题的代码。
light_bulbs.png

2. 团队协作功能

  • VS2015中可以看到当前文件的修改情况。在当前被打开的文件下方,有两个超链接。如下图所示:
    git_change_link.png
  • 上图中左侧超链接是本次文件上次修改时间和修改者名称。点击该超链接后,会以图形化的方式显示此文件总修改次数,每个修改者的修改次数。
    git_file_commit_graph.png
  • 图git_change_link.png中,蓝色部分的右侧超链接显示当前打开文件的修改者人数和修改次数。点击后会显示此文件的每一次修改的commit message和代码提交时间。
    git_commit_history.png
  • 双击上图中单个commit后,会在Visual Studio中打开此次提交的详细信息
    git_commit_detail.png
  • 单击涉及到的文件后,会在右侧窗口显示改动细节
    git_commit_change_detail.png
  • 这样就不用再打开smartgit来比较每次提交的改动了,全部操作都可以在VS2015里完成。此外,为了和正常的文件区分,VS2015将打开的文件前加了diff前缀,如下图所示:
    git_commit_diff.png
  • 单击Team->Manage Connections可打开Team Explorer窗口并进行相关操作。

3. 可能会影响编译部分的改动

用VS2015打开原工程时,会弹出将platform tools set升级为VS2015(v140)的界面。 我当时选择了升级主工程以及依赖工程。但是在编译阶段,遇到了如下问题:

  1. fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration
    经过查阅相关资料,原来是在很多库中,使用了如下定义: #define snprintf _snprintf但是在VS2015中在C99中也定义了snprintf(),因此引发了重复定义。要解决此类错误,可通过如下预编译指令解决:
    #if _MSC_VER>=1900
    #define STDC99
    #else
    #ifndef snprintf
    #define snprintf _snprintf
    #endif
    #endif
    _MSC_VER相关宏定义如下:
    MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
    MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
    MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
    ......
  2. error LNK2019: unresolved external symbol _imp__fprintf referenced in function
    在网上查阅资料得知,是由于VS2015做了如下改动引起:
    在之前版本中:
    _CRTIMP FILE * __cdecl __iob_func(void);
    #define stdin (&__iob_func()[0])
    #define stdout (&__iob_func()[1])
    #define stderr (&__iob_func()[2])
    struct _iobuf {
    char *_ptr;
    int _cnt;
    char _base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char _tmpfname;
    };
    typedef struct _iobuf FILE;
    而在VS2015中:
    _ACRTIMP_ALT FILE
    __cdecl __acrt_iob_func(unsigned);
    #define stdin (__acrt_iob_func(0))
    #define stdout (__acrt_iob_func(1))
    #define stderr (__acrt_iob_func(2))
    typedef struct _iobuf
    {
    void
    _Placeholder;
    } FILE;
    解决方案

我找到了一篇微软有关VS2015C++重大改动的文章,有兴趣的同学请参考这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,387评论 25 707
  • 源代码管理工具的起源 为什么会出现源代码管理工具? 为了解决在软件开发过程中,由源代码引发的各种蛋疼繁琐问题 源代...
    小白文_Vincent阅读 3,154评论 2 8
  • 沅茵 七十年代冬天的早晨,一轮红色霞光铺满大杂院,格外的灿烂,格外的明亮。老人说那不是冬天,也不是霞光,更...
    沅茵阅读 580评论 0 1
  • 今天吃过晚饭,去学校对面小区兜兜转转。在修路,大路中间挖出很大的坑,隔断学校和小区,如银河一般,隔开了牛郎和织女。...
    小西西西西西瓜阅读 317评论 0 0
  • 我的老公是家中长子,按说是很有担当很成熟的男子汉,可惜他下面是两个妹妹,而我的婆婆又是一个极其重男轻女的人,所以对...
    藩茗阅读 305评论 1 1