Vs2013在Linux开发中的应用(16): 修改调试器参数

快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息

仿照debugger_local_windows.xml的写法,修改名称和ID:

<?xml
version="1.0"encoding="utf-8"?>

<!--Copyright, Microsoft Corporation,
All rights reserved.-->

<Rule
Name="9F2571B6-5567-43D2-8510-BFB85D559120"
DisplayName="远程
gdb 调试器"PageTemplate="debugger"
Description="远程
gdb 调试器选项 ssh"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/build/2009/properties">

<Rule.DataSource>

<DataSource
Persistence="UserFile"/>

</Rule.DataSource>

<StringProperty
Name="LocalDebuggerCommand"
DisplayName="命令"
Description="要执行的调试命令。"
F1Keyword="VC.Project.IVCLocalDebugPageObject.Command">

<StringProperty.ValueEditors>

<ValueEditor
EditorType="DefaultFindFullPathPropertyEditor"
DisplayName="&lt;regsvr32.exe&gt;">

<ValueEditor.Metadata>

<NameValuePair
Name="Exename"Value="regsvr32.exe"/>

</ValueEditor.Metadata>

</ValueEditor>

<ValueEditor
EditorType="DefaultStringPropertyEditor"
DisplayName="&lt;编辑...&gt;"/>

<ValueEditor
EditorType="DefaultFilePropertyEditor"
DisplayName="&lt;浏览...&gt;"/>

</StringProperty.ValueEditors>

</StringProperty>

</EnumProperty>

</Rule>

在IDE界面上可以看到我们自定义的调试器:

但此时按F5,VS并不会调用我们的调试器:

查下MSDN关于启动调试有这样一段话:

Programmatically, when the userfirst presses F5, Visual Studio‘s debug package calls the project package(which is associated with the type of program being launched) through
theDebugLaunch method, which in turn fills out a VsDebugTargetInfo2 structure with the solution‘s active project debugsettings. This structure is passed back to the debug package through a call tothe LaunchDebugTargets2 method. The debug
package then instantiates the sessiondebug manager (SDM), which launches the program being debugged and any associateddebug engines.

One of the arguments passed tothe SDM is the GUID of the DE to be used to launch the program.

If the DE GUID is not GUID_NULL,the SDM co-creates the DE, and then calls itsIDebugEngineLaunch2::LaunchSuspended method to launch the program. For example,if a program is
written in native code, thenIDebugEngineLaunch2::LaunchSuspended will probably call CreateProcess andResumeThread (Win32 functions) to run the program.

也就是说,IDE会先调用VC
Package中的IVsDebuggableProjectCfg.DebugLaunch
方法,在VC实现的这个方法中填充VsDebugTargetInfo2结构体,然后初始化SDM。而VC的填充过程是我们无法干预的,即使我们添加了自己的调试器参数,VC似乎也使用不上。

观察MSBUILD目录下的文件,发现有个地方出现了一个调试器的GUID:

<LocalGPUDebuggerTargetType
Condition="‘$(GPUDebuggerTargetType)‘==
‘‘">{F4453496-1DB8-47F8-A7D5-31EBDDC2EC96}</LocalGPUDebuggerTargetType>

<RemoteGPUDebuggerTargetType
Condition="‘$(GPUDebuggerTargetType)‘==
‘‘">{F4453496-1DB8-47F8-A7D5-31EBDDC2EC96}</RemoteGPUDebuggerTargetType>

这里的{F4453496-1DB8-47F8-A7D5-31EBDDC2EC96}就是预先注册的一个调试器:

我们将这里的GUID替换为自己的调试器的GUID:

<PropertyGroup>

<DebuggerType>GpuOnly</DebuggerType>

<LocalGPUDebuggerTargetType
Condition="‘$(GPUDebuggerTargetType)‘==
‘‘">{9F2571B6-5567-43D2-8510-BFB85D559120}</LocalGPUDebuggerTargetType>

<RemoteGPUDebuggerTargetType
Condition="‘$(GPUDebuggerTargetType)‘==
‘‘">{9F2571B6-5567-43D2-8510-BFB85D559120}</RemoteGPUDebuggerTargetType>

</PropertyGroup>

再将调试启动选项配置为:

再按F5启动调试,果然VS正确调用了我们的调试器!!!



时间: 2024-10-09 16:49:06

Vs2013在Linux开发中的应用(16): 修改调试器参数的相关文章

Vs2013在Linux开发中的应用(19): 启动gdb

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 1.1    加载调试引擎 由于我们无法干预VC的调试引擎加载,但可以侦听VC的调试引擎加载事件,在此事件处理中可以调用自己的调试引擎: publicvoid LaunchDebugTarget(string filePath, string env) { varserver = (IDebugCoreServer3)GetService(typeof(IDebugCoreServer3));

Vs2013在Linux开发中的应用(17): 调试参数传递

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在启动调试后还有一个问题,那就是调试参数的传递,当调试器启动时,我们似乎已经无法获取到IDE的项目参数,此时只能通过调试器的环境变量进行参数传递. 首先在项目参数中定义好目标机器的相关信息: 然后将这些参数通过调试器的环境变量参数传递进去: 当启动调试时,SDM将调用: intIDebugEngineLaunch2.LaunchSuspended(string pszServer, IDebug

Vs2013在Linux开发中的应用(28):单步执行

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在VS调试时,有三种类型的单步操作逐语句,逐过程和跳出,当进行这三种操作时,SDM调用的其实是同一个回调: // This method is deprecated. Use the IDebugProcess3::Step method instead. /// <summary> /// Performs a step. /// /// In case there is any threa

Vs2013在Linux开发中的应用(32):文本可视化

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 VS2013提供了一个文本可视化的工具,在显示XML之类的字符串时相当方便,下面我们就让VS2013也能显示我们的字符串: 首先我们需要判断表达式的返回值类型,如果是字符串的话就设置 if (_evalResult.Flags.HasFlag(EvaluationFlags.HasRawRepr)) { propertyInfo.dwAttrib |= enum_DBG_ATTRIB_FLAGS

Vs2013在Linux开发中的应用(18): 应用程序调试方案

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在前面我们对VS的调试接口做了基本的功能验证,下面开始方案的拟定: 如上图所示,我们需要在WINDOWS端运行两个辅助程序,一个是RemoteConsole,这个程序的主要作用是显示远端程序的输出,并将用户输入传送给远端.另一个是python解释器,这个解释器用于完成SSH/TELNET/COM连接,并负责调用远端Linux上的gdb. 当启动项目调试时,VC调试引擎将加载我们的RemoteCo

Vs2013在Linux开发中的应用(34):Ctrl + F5支持

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 VS中常用的Ctrl+F5可以不调试直接运行,但是其运行的环境变量仍然可以传递给应用程序,在我们的调试方案中使用了一个叫RemoteConsole的stub程序 在调试状态下,EmbedLinux调试引擎会在开始调试时打开一个自动选择的服务端口,再将此端口号通过环境变量传递给RemoteConsole. 在直接运行的情况下,RemoteConsole将由VS自动加载,此时由于没有调试引擎,也就没

Vs2013在Linux开发中的应用(30):程序中断

在我们在gdb中加载程序并运行时,可以按CTRL-C中断执行,此时gdb输出: ^C*stopped,reason="signal-received",signal-name="SIGINT",signal-meaning="Interru pt",frame={addr="0x00110424",func="__kernel_vsyscall",args=[]},thread-id="1&quo

Vs2013在Linux开发中的应用(26):表达式计算

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 当VS调试时将鼠标移到一个变量上面的时候,VS将显示这个变量的值,实际上这个时候VS进行了表达式的计算,我们所需要做的,就是把这个过程转换为gdb的命令: Operation Description -enable-pretty-printing enable Python-based pretty-printing -var-create create a variable object -v

Vs2013在Linux开发中的应用(33):反汇编

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 1.1    失败 按照文档的说法,反汇编应当实现IDebugDisassemblyStream2接口,然后在 // The debugger calls this when it needs to obtain the IDebugDisassemblyStream2 for a particular code-context. // The sample engine does not su