天道酬勤,学无止境

debugging

Attach debugger in C# to another process

问题 我希望能够自动附加调试器,例如: System.Diagnostics.Debugger.Launch() ,而不是将当前进程附加到另一个命名进程。 我有一个进程名称和 PID 来识别另一个进程。 这可能吗? 回答1 编辑: GSerjo 提供了正确的解决方案。 我想分享一些关于如何改进它的想法(和解释)。 我希望我改进的答案对遇到同样问题的其他人有用。 将 VS 调试器附加到进程 手动 打开 Windows 任务管理器 ( Ctrl + Shift + Esc )。 转到选项卡Processes 。 右键单击该进程。 选择Debug 。 或者,在 Visual Studio 中,选择Debug > Attach to Process... 结果会有所不同,具体取决于您是否有权访问源代码。 自动使用 C# 注意事项:以下代码很脆弱,因为某些值(例如 Visual Studio 版本号)是硬编码的。 如果您打算分发您的程序,请记住这一点。 首先,在你的项目中添加对 EnvDTE 的引用(右键单击解决方案资源管理器中的引用文件夹,添加引用)。 在下面的代码中,我只会展示不寻常的 using 指令; using System等正常的省略。 因为您正在与 COM 交互,所以您需要确保使用 STAThreadAttribute 装饰您的Main方法(应用程序的入口点)。 然后

2022-07-11 09:31:52    分类:技术分享    c#   debugging

debugging go application doesn't stop at breakpoints

问题 我有最新的 IntelliJ Ultimate EAP 和最新的 Gogland,并且在 MacOS Sierra 下都出现了问题。 我正在尝试通过为Go Application创建调试配置文件来调试 Go 应用程序,并且Run Kind配置为Package ,其中包含当前项目的包名称。 在Go tool arguments下,我配置了-ldflags="-linkmode internal" 。 当我在有一些断点的情况下启动调试会话时,它会运行但不会在这些断点处停止。 我错过了什么? 谢谢 更新 好的,我能够通过以下项目重现该问题: test1.go包含: package main const Numb uint64 = 5 test2.go包含: package main import "fmt" func main() { fmt.Println(Numb); } 我使用以下参数创建了一个Go Application运行/调试配置: Run kind: package Package: github.com/kfirufk/test Working Directory: /usr/local/Cellar/go/1.8.1/src/github.com/kfirufk/test/ 当我在test2.go第 6 行(主函数中的第一行也是唯一的代码行

2022-05-16 23:58:11    分类:技术分享    debugging   go   intellij-idea   GoLand

Breakpoints and debugging statements open "read-only inlined content"

问题 语境: 我正在开发一个使用 Webpack 的 React.js 应用程序,并且我使用 VS Code 作为我的编辑器。 Webpack 配置将inline-source-map指定为其devtool选项。 但我也在使用热重装。 因此,源映射实际上是通过这个webpack://协议进入浏览器的。 我正在使用以下launch.json配置: { "name": "Launch in Chrome", "type": "chrome", "request": "launch", "url" : "https://myapp.local/", // This is not the real app URL "trace" : true, "sourceMaps": true, "webRoot": "${workspaceRoot}/build", "sourceMapPathOverrides": { "webpack:///*" : "${webRoot}/*" }, "preLaunchTask" : "development", "internalConsoleOptions": "openOnSessionStart", "smartStep": true, "skipFiles": [ "node_modules/**", "extensions:" ] }

2022-05-16 22:20:03    分类:技术分享    debugging   webpack   visual-studio-code

VSCode debugger messing up relative paths

问题 所以我试图运行 VSCode 调试器运行我的 express 程序,但我注意到它弄乱了相对目录路径。 当使用像JIMP这样的模块时,当我从 Powershell 运行应用程序时,我需要输入相对于项目根目录( package.JSON所在的位置)的路径来查找图像。 但是当我从 VSCode 调试器运行它时,我得到一个错误,因为它正在查找相对于我的app目录的图像,该目录是我项目根目录中的一个文件夹。 有没有我可以编辑的配置来解决这个问题? launch.json : { // Use IntelliSense to learn about possible Node.js debug attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "npm start", "program": "${workspaceRoot}/app/app.js" } ] } jsconfig

2022-05-16 13:21:05    分类:技术分享    javascript   debugging   npm   visual-studio-code

Debugging typescript with source maps and webpack

问题 我有用 Typescript 编写的项目,我希望能够调试它(在Chrome Dev Tools或Intellij中)。 一开始我看到不支持 Typescript 的import功能。 所以我尝试使用Webpack和webpack dev server ,但这完全失败了。 即使我的应用程序正在运行(由于有一个包含所有代码的bundle.js文件),它也无法将代码与给定的源映射匹配,这使得调试变得不可能。 在我停止使用 webpack 后,我尝试添加require.js作为依赖项来解决我遇到的require is not defined错误。 那行得通,但现在我又被困住了,得到了这个: 未捕获的 ReferenceError:未定义导出 我不知道为什么这不起作用。 我想让我的应用程序工作(通过 webpack 或者能够在编译后解析导入语句)并且仍然能够使用 typescript 生成的源映射来调试代码。 我怎样才能做到这一点? 我正在附加我的配置文件,以防那里缺少某些东西: tsconfig.json { "compilerOptions": { "module": "commonjs", "target": "es6", "sourceMap": true }, "include": [ "scripts/**/*" ], "exclude": [ "node_modules"

2022-05-16 11:30:12    分类:技术分享    debugging   typescript   intellij-idea   webpack   source-maps

Debugging Xamarin.Forms iOS apps on Visual Studio using a Mac Agent

问题 我正在尝试通过 Visual Studio 2015 上的 Mac 代理调试我的 Xamarin.Forms 应用程序。iPhone 模拟器运行良好,但无论何时遇到错误 VS(在 Windows 上)总是在同一行中断,无论错误在哪里编码。 IE。 在 Main.cs 这一行: UIApplication.Main(args,null,"AppDelegate"); 堆栈信息也没有用。 找到实际错误行的唯一方法是设置一个断点并单步执行,直到它崩溃。 这是非常缓慢和烦人的。 有谁知道使用 Mac 代理在 VS 上进行调试的更好方法? 提前致谢 回答1

2022-05-16 11:23:04    分类:技术分享    ios   macos   debugging   xamarin.ios   xamarin.forms

How we can debug a signed apk without having source code?

问题 我想问一下是否有可能在没有源代码的情况下调试发布 apk 以及我们如何阻止用户执行此操作? 我认为我无法在没有源代码的情况下调试 apk(清单默认为android:debuggable="false" ),直到我将它发送给客户端并且他要求我禁用可调试模式,因为他遇到了这个问题。 我试图重现这个问题,我在想他是否做了逆向工程。 回答1 您可以使用多种不同的工具调试已签名的 APK。 大多数方法将被视为逆向工程的一种形式。 在高层次上,一种常见的方法(用于动态“实时”调试)是: 使用 APKTool 通过 AndroidManifest.xml 中的属性启用调试。 对齐并签署新修改的 APK。 使用 ADB 将新的“可调试”APK 推送到设备/模拟器。 使用调试器,例如 GDB(NDK 包含带有 arm 工具链的 gdbserver)。 值得一提的是,静态分析也是一种选择,可以将 APK 解压缩并反编译为 SMALI/Java。 有许多工具可用于帮助逆向和调试 APK。 我经常使用的一些是; dex2jar、JDGUI、APK Studio、JEB、IDA Pro、VisualGDB。 回答2 您可以使用 Android Studio 3.0 及更高版本在没有源代码的情况下调试 APK 首先确保启用调试要开始调试 APK,请单击 Android Studio

2022-05-16 09:45:04    分类:技术分享    android   debugging   apk

Strange debugger behaviour in async method

问题 当我跨过代码中的断点时,我遇到了调试器的奇怪行为: public async Task DoSomeWork() { await Task.Run(() => { Thread.Sleep(1000); }); var test = false; if (test) { throw new Exception("Im in IF body!"); } } 调试器进入if正文。 值得注意的是,异常并没有真正被抛出,而是看起来确实如此。 因此,如果您将断点放在throw上,您将无法重现。 您必须将它放在上面并下到if主体才能抓住它。 这同样适用于任何类型的异常实例(以及显式null ),甚至适用于return而不是throw 。 除此之外,即使我用await删除行它也有效。 我试图从不同的 PC 上运行这个代码片段,所以它不是 PC 问题。 我还认为这是 VS 代码中的错误,并试图在 JetBrains 的 Rider 中运行它 - 结果相同。 我确定这是异步的,但它是如何明确工作的? 回答1 您的代码使用 Visual Studio 2015 在“调试”版本中轻松重现了该问题。我只需添加Program.Main()并调用DoSomeWork().Wait(); ,在方法中设置断点并逐步执行。 至于为什么会这样,这无疑是由于正在重写的async方法和生成的调试数据库(.pdb

2022-05-16 06:17:03    分类:技术分享    c#   debugging   asynchronous   return   throw

Program crashes with 0xC000000D and no exceptions - how do I debug it?

问题 我有一个使用第三方库的 Visual C++ 9 Win32 应用程序。 当使用一组特定参数调用该库中的函数时,程序会因“异常代码 0xC000000D”而崩溃。 我试图附加 Visual Studio 调试器 - 没有抛出异常(既没有 C++ 也没有像访问冲突这样的结构)并且也没有调用terminate() 。 程序仍然默默地结束。 程序只是异常结束但没有在调试器中停止是怎么发生的? 如何定位问题? 回答1 回答2 对该问题的其他答案和评论有很大帮助。 这就是我所做的。 我注意到,如果我在 Visual Studio 调试器下运行程序,它只会静默结束,但如果我在没有调试器的情况下运行它,它会崩溃并出现一个消息框(通常的 Windows 消息框说我丢失了未保存的数据,每个人都非常抱歉)。 所以我在没有调试器的情况下启动了程序,让它崩溃,然后 - 当消息框仍然存在时 - 附加调试器并点击“Break”。 这是调用堆栈: ntdll.dll!_KiFastSystemCallRet@0() ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc bytes kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48 bytes kernel32.dll!_WaitForMultipleObjects

2022-05-16 04:59:04    分类:技术分享    c++   winapi   debugging   visual-c++

`Use managed compatibility mode` or `Enable native code debugging`?

问题 我为 Autodesk Revit 编写 .net-plugins。 Revit 是非托管应用程序。 因此,为了成功调试,我将Use managed compatibility mode选项或Enable native code debugging选项(或两者)设置为ON 。 否则无法启动调试。 其中第一个适用于所有项目。 其中第二个单独用于每个项目。 这些选项有什么区别? 我不明白他们在做什么。 在我的情况下使用哪个选项更正确? 回答1 您不必启用非托管调试来调试您的插件。 当宿主应用程序加载您的加载项时,您的代码中的断点将激活(从空心变为实心)。 如果您不确定这是否发生,请查看“调试”>“Windows”>“模块”窗口。 启用非托管调试不会对调试会话产生太大影响,但是可能需要更长的时间才能开始,并且您可能需要暂时禁用符号服务器以避免对其感到恼火。 “工具”>“选项”设置的名称相当糟糕。 微软一直在开发新的调试引擎,但被迫(或选择)放弃了一些功能。 “使用托管兼容模式”强制加载旧版本的托管调试器,即在 VS2010 中使用的调试器。 调试 C++/CLI 代码时需要它。 它在 VS2015 中也很有用,它的托管调试引擎非常有问题。 您将错过一些新的调试功能,例如返回值检查和 64 位编辑+继续。 否则,您不需要它来调试您的加载项。 “使用本机兼容模式”的故事大致相同

2022-05-16 02:55:03    分类:技术分享    debugging   visual-studio-2015