首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将断点与MDbg绑定(始终未绑定且无效)

无法将断点与MDbg绑定(始终未绑定且无效)
EN

Stack Overflow用户
提问于 2017-12-07 22:27:02
回答 1查看 335关注 0票数 1

我不能用命令行MDbg (.Net托管代码调试器)在命令行上以及在Windows 10下使用csc编译的C#模块设置任何工作的(而不是未绑定的)断点。我花了一整天的时间试图弄清楚如何解决这个问题,但毫无效果。下面是我为显示这个奇怪的麻烦而采取的详细步骤。

详细信息

已安装MDbg和NuGet 4.4.1.4656:

代码语言:javascript
复制
nuget install MDbg -Version 0.1.0

然后将路径设置为xxx/NuGet/MDbg.0.1.0/tools,然后编译了一个简单的测试C#源代码(用.Net框架3.5和4.7尝试,同样的问题):

代码语言:javascript
复制
csc /debug+ /optimize- test0.cs

Test0.cs的内容:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
           int max;
           try   {max=int.Parse(args[0]);}
           catch {max=222;}
           List<int> primes = CollectPrimesUpTo(max);
           Console.WriteLine(String.Join(", ", primes.ConvertAll(i => i.ToString()).ToArray()));
        }
        static List<int> CollectPrimesUpTo(int max)
        {
            List<int> result = new List<int>();
            for(int i=1; i<=max; i++) {
             int j, sq = (int)Math.Sqrt((double)i);
             for(j=2; j<=sq; j++) {
              if(i % j == 0)
               break;
             }
             if(j>sq)
              result.Add(i);
            }  
           return result;
        }
    }
}

下面是一个调试会话,在test0.cs|.exe|.pdb所在的同一文件夹下启动,尝试设置断点的尝试不同(无论如何还有更多尝试):所有未绑定且无法工作,因为go命令会运行程序。一些奇怪的事情也是设置路径是需要显示命令的工作。否则,您将得到这样一条荒谬的消息:"Error:源文件'b:_limbo\GUIonCSharpMono-master\test0.cs‘不可用。“

代码语言:javascript
复制
D:\_limbo\GUIonCSharpMono-master>Mdbg test0 23
MDbg (Managed debugger) v0.0.0.0 started.
Copyright (C) Microsoft Corporation. All rights reserved.
For information about commands type "help";
to exit program type "quit".
run test0 23
STOP: Breakpoint Hit
located at line 9 in test0.cs
[p#:0, t#:0] mdbg> path D:\_limbo\GUIonCSharpMono-master
Path set to: D:\_limbo\GUIonCSharpMono-master
6      class Program
7      {
8          static void Main(string[] args)
9:*        {
10             int max;
11             try   {max=int.Parse(args[0]);}
[p#:0, t#:0] mdbg> x test0
~0. ConsoleApplication1.Program.Main(args)
~1. ConsoleApplication1.Program.CollectPrimesUpTo(max)
~2. ConsoleApplication1.Program..ctor()
~3. ConsoleApplication1.Program.<Main>b__0(i)
[p#:0, t#:0] mdbg> break ~1
Breakpoint #1 unbound (:1!ConsoleApplication1.Program::CollectPrimesUpTo(+0))
[p#:0, t#:0] mdbg> break CollectPrimesUpTo
Breakpoint #2 unbound (::CollectPrimesUpTo(+0))
[p#:0, t#:0] mdbg> break ConsoleApplication1.Program.CollectPrimesUpTo
Breakpoint #3 unbound (ConsoleApplication1.Program::CollectPrimesUpTo(+0))
[p#:0, t#:0] mdbg> break test0.cs:25
Breakpoint #4 unbound (line 25 in test0.cs)
[p#:0, t#:0] mdbg> break
Current breakpoints:
Breakpoint #1 unbound (:1!ConsoleApplication1.Program::CollectPrimesUpTo(+0))
Breakpoint #2 unbound (::CollectPrimesUpTo(+0))
Breakpoint #3 unbound (ConsoleApplication1.Program::CollectPrimesUpTo(+0))
Breakpoint #4 unbound (line 25 in test0.cs)
[p#:0, t#:0] mdbg> go
1, 2, 3, 5, 7, 11, 13, 17, 19, 23
STOP: Process Exited
mdbg> exit
D:\_limbo\GUIonCSharpMono-master>

任何帮助,解决方案,建议,想法,高度赞赏。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-05-10 10:33:09

问题是,PDB文件是在.Net Core中引入的新的“便携”PDB文件格式,但是MDbg只理解最初与.Net框架一起使用的遗留的"Windows“或”完整“PDB格式,因此为了使其能够工作,在编译时使用该选项来创建full而不是便携。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47704870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档