1.JS代码调试映射工具——Source Maps简介
2.如何调试跟踪AndroidFramework源代码
3.å¦ä½å¨ASP.NET Core 6ä¸ä½¿ç¨è·è¸ªçå¬å¨
4.Android Activity Deeplink启动来源获取源码分析
5.Messier - 简单易用的何跟Objective-C方法跟踪工具
JS代码调试映射工具——Source Maps简介
在JavaScript开发中,Source Maps扮演着至关重要的踪源角色,特别在利用Babel等工具处理ES6+代码转换为ES5的码何过程中。简单来说,跟踪Source Maps是源码一种技术,它能够将经过转换的信息家政服务app源码代码准确地映射回原始的源代码,从而实现更为直观的何跟调试和错误追踪。
其工作原理是踪源通过在构建过程中生成额外的映射文件,该文件包含了转换前后代码之间的码何对应关系。这种映射信息使得开发者能够在出现错误时,跟踪直接在原始源代码中定位问题,源码而无需查看复杂的信息转换后代码。
在实际操作中,何跟开发工具通常会自动或通过配置生成Source Maps。踪源这不仅提升了调试效率,码何还便于版本控制和部署,因为开发者可以跟踪代码从源到编译后的变化过程。
然而,使用Source Maps并非没有代价。业主群网站源码它可能增加文件大小,影响性能,并需要考虑安全因素,比如防止恶意代码利用Source Maps进行攻击。因此,开发者在集成和使用时需要根据项目的具体需求,权衡性能和文件管理,确保其在开发环境中的有效性和安全性。
总的来说,Source Maps作为现代JavaScript开发中的关键组件,通过其集成性和灵活性,极大地提升了开发者的工作效率,使得代码的调试和管理变得更加直观和高效。
如何调试跟踪AndroidFramework源代码
为了在Eclipse中调试跟踪Android Framework的源代码,需要遵循一系列步骤。以下内容改写并优化了原文的条理和质量,确保语义不变,并保留了原文的增强现实项目源码.条目编号。
1. **环境配置**:
- 确保安装了JDK、Eclipse、Android SDK和ADT插件。
- 针对跟踪调试Android源码,需要有可访问的Android源码编译环境,可以是虚拟机、网络共享或Linux本地环境。
- 确保Android源码是编译过的Eng版本。
2. **基本设置**:
- 将Android源码路径下的`.classpath`文件复制到源码根目录。
- 修改Eclipse的`eclipse.ini`文件以增加Java堆大小。
3. **创建工程**:
- 在Eclipse中创建一个新的Java项目。
- 输入项目名称,选择Android源码路径作为项目位置。
- 完成创建,并注意排除或添加项目中错误的配置包。
4. **调试环境配置**:
- 在Eclipse中设置远程Java应用程序的调试配置。
- 填写名称、项目选择为Android源码项目、接弹球游戏源码端口填写正确的端口号。
- 应用并保存配置。
5. **调试过程**:
- 启动模拟器或连接真机,确保设备在DDMS视图中可见。
- 在目标代码处设置断点。
- 在设备上触发调试进程(如锁屏解锁操作)。
- 使用Eclipse的调试工具来控制程序执行和查看变量值。
6. **错误处理**:
- 如果导入的工程出现错误,可以通过以下方式处理:
- 方法一:编译自己的SDK,替换默认SDK中的`android.jar`。
- 方法二:将编译后的`framework`的`classes.jar`文件添加到Eclipse工程的`build path`中。
7. **注意事项**:
- 本文档适用于Windows、Mac OS和Linux系统。
- 可以调试Java代码,但不能调试Framework中的C/C++代码。
- 确保Android源码已编译,并且是Eng模式。
- 调试前需在目标代码处设置断点,c vector容器源码并知道其执行的进程。
通过这些步骤,开发者可以在Eclipse中有效地调试Android Framework的源代码。
å¦ä½å¨ASP.NET Core 6ä¸ä½¿ç¨è·è¸ªçå¬å¨
å½ä½¿ç¨ASP.NET Core 6æ建çåºç¨ç¨åºæ¶ï¼ä½ å¯è½ç»å¸¸æ³ä½¿ç¨è·è¸ªåè®°å½æ¥çæ§ä½ çåºç¨ç¨åºçæ§è½åè¯æé误ãä½ ä¹å¯ä»¥å¨ç产ç¯å¢ä¸ä½¿ç¨è·è¸ªæ¥è¡¡éä½ çåºç¨ç¨åºå¨è¿è¡æ¶ç表ç°ãè¿ç¯æç« è®¨è®ºäºæ们å¦ä½å¨ASP.NET Core 6ä¸ä½¿ç¨è¿½è¸ªãæ们å°ç 究å¦ä½ä½¿ç¨è·è¸ªçå¬å¨æ¥æ¶éè·è¸ªä¿¡æ¯ï¼å¹¶ä½¿ç¨ILoggerå°è·è¸ªè¾åºå¼å¯¼å°äºä»¶æ¥å¿ä¸ã
è¦ä½¿ç¨æ¬ææä¾ç代ç 示ä¾ï¼ä½ çç³»ç»ä¸åºè¯¥å®è£ æVisual Studio ãå¦æä½ è¿æ²¡æå¯æ¬ï¼ä½ å¯ä»¥å¨è¿éä¸è½½Visual Studio ã
å¨Visual Studio ä¸å建ä¸ä¸ªASP.NET Core Web API项ç®é¦å ï¼è®©æ们å¨Visual Studio ä¸å建ä¸ä¸ªASP.NET Core项ç®ãæç §è¿äºæ¥éª¤å°å¨Visual Studio ä¸å建ä¸ä¸ªæ°çASP.NET Core 6 Web API项ç®ã
å¯å¨Visual Studio IDEã
ç¹å» "å建æ°é¡¹ç®"ã
å¨ "å建æ°é¡¹ç® "çªå£ï¼ä»æ¾ç¤ºç模æ¿å表ä¸éæ© "ASP.NET Core Web API"ã
ç¹å» "ä¸ä¸æ¥"ã
å¨ "é ç½®ä½ çæ°é¡¹ç® "çªå£ä¸ï¼æå®æ°é¡¹ç®çå称åä½ç½®ã
æ ¹æ®ä½ çå好ï¼å¯ä»¥éæ©å¾é "å°è§£å³æ¹æ¡å项ç®æ¾å¨åä¸ç®å½ä¸ "å¤éæ¡ã
ç¹å» "ä¸ä¸æ¥"ã
å¨æ¥ä¸æ¥æ¾ç¤ºç "éå ä¿¡æ¯ "çªå£ä¸ï¼ç¡®ä¿å¾é "使ç¨æ§å¶å¨... "çå¤éæ¡ï¼å 为æ们å¨è¿ä¸ªä¾åä¸ä¸ä¼ä½¿ç¨æå°çAPIãå° "éªè¯ç±»å "ä¿ç为 "æ "ï¼é»è®¤ï¼ã
ç¡®ä¿ "å¯ç¨Docker"ã"为HTTPSé ç½® "å "å¯ç¨å¼æ¾APIæ¯æ "çå¤éæ¡ä¸è¢«éä¸ï¼å 为æ们ä¸ä¼å¨è¿é使ç¨ä»»ä½è¿äºåè½ã
ç¹å»å建ã
æ们å°ä½¿ç¨è¿ä¸ªASP.NET Core 6 Web API项ç®ï¼å¨æ¬æçåç»é¨å使ç¨è·è¸ªçå¬å¨ã
ä»ä¹æ¯è·è¸ªï¼ä¸è¿½è¸ªä¸»è¦äºä»¶çäºä»¶æ¥å¿ç¸æ¯ï¼è¿½è¸ªå¯ä»¥æ´å ¨é¢å°äºè§£è¿è¡ä¸çåºç¨ç¨åºåå ¶ç»ä»¶ãæ¥å¿ç±ç»æåæéç»æåçæ¶é´æ³æ°æ®ç»æï¼æ¾ç¤ºäºä½ çåºç¨ç¨åºä¸åççäºä»¶çè®°å½ã追踪æä¾äºå¯¹å个请æ±ä»¥åå®å¦ä½è¢«å¤ççæ´å¤å¯è§æ§ã
System.Diagnosticså½å空é´å å«TraceåDebugç±»ãè·è¸ªç±»å¨ç产ç¯å¢ä¸ä½¿ç¨ï¼èè°è¯ç±»å¨å¼åæ¶ä½¿ç¨ã
追踪é常å æ¬ä»¥ä¸ä¸ä¸ªé¶æ®µã
å·¥å ·åãæ们ç¼åå¿ è¦ç代ç æ¥æè·ç¸å ³ä¿¡æ¯
追踪ãæ们æè·è¸ªä¿¡æ¯åå°æå®çç®æ ï¼å³äºä»¶æ¥å¿ãææ¬æ件ãæ°æ®åºè¡¨çã
åæãæ们åæä»è·è¸ªä¸æ¶éå°çä¿¡æ¯ï¼ä»¥ç¡®å®åºç¨ç¨åºä¸çç¶é¢ã
ä»ä¹æ¯è·è¸ªçå¬å¨ï¼ä¸ºä»ä¹éè¦å®ä»¬ï¼è·è¸ªçå¬å¨æ¶éè·è¸ªä¿¡æ¯ï¼åå¨å®ä»¬ï¼å¹¶å°å®ä»¬å¼å¯¼å°ä¸ä¸ªéå½çç®æ ï¼å¦ææ¬æ件ã.NETæä¾äºå ç§è·è¸ªçå¬å¨ï¼å æ¬ä»¥ä¸å ç§ã
ConsoleTraceListener - å°è·è¸ªä¿¡æ¯åéå°æ§å¶å°çªå£ã
DefaultTraceListener - å°è·è¸ªä¿¡æ¯åéå°æ åè°è¯è¾åºã
DelimitedListTraceListener - å°è·è¸ªè¾åºä»¥éå®çæ ¼å¼åéå°æµãæµä½å®¶æææ¬ä½å®¶ã
EventLogTraceListener - åéè·è¸ªä¿¡æ¯å°äºä»¶æ¥å¿ã
TextWriterTraceListener - åéè·è¸ªä¿¡æ¯å°ä¸ä¸ªææ¬æ件ã
XmlWriterTraceListener - å°è·è¸ªä¿¡æ¯è½¬æ¢ä¸ºXMLã
System.Diagnostics.DebugåSystem.Diagnostics.Traceç±»å¯ä»¥åè·è¸ªçå¬å¨åéæ¶æ¯ï¼èçå¬å¨åå°æ¶æ¯åéå°éå½çç®æ ã
å¨ASP.NET Core 6ä¸ä½¿ç¨é ç½®æ件å建ä¸ä¸ªè·è¸ªçå¬å¨ä½ å¯ä»¥éè¿ä½¿ç¨é ç½®æ件æç¼åèªå®ä¹ä»£ç æ¥å建ä¸ä¸ªè·è¸ªçå¬å¨ãä¸é¢æ¾ç¤ºç代ç çæ说æäºå¦ä½ä½¿ç¨ä½ çåºç¨ç¨åºé ç½®æ件å建ä¸ä¸ªè·è¸ªçå¬å¨ã
<configuration>æææ·»å å°çå¬å¨éåä¸ççå¬å¨é½ä¼æ¶å°è·è¸ªè¾åºãç¶èï¼ä½ å¯ä»¥ä½¿ç¨ä¸ä¸ªçå¬å¨èä¸æå®æ·»å å°çå¬å¨éåä¸ãå¨è¿ç§æ åµä¸ï¼ä½ å¨çå¬å¨ä¸ä½¿ç¨WriteæWriteLineæ¹æ³åéè¾åºã
ä¸é¢ç代ç 说æäºä¸ä¸ªçå¬å¨ï¼å®æ²¡æ被添å å°çå¬å¨éåä¸ï¼ä½ä»ç¶è½å¤å°è·è¸ªä¿¡æ¯åéå°è¾åºçªå£ãæ件æä»»ä½é¢å é ç½®çè¾åºã
TextWriterTraceListenermyFirstListener=newå¨ASP.NET Core 6ä¸å建ä¸ä¸ªèªå®ä¹è·è¸ªçå¬å¨å¨å¤§å¤æ°æ åµä¸ï¼.NET 6é»è®¤é带çè·è¸ªçå¬å¨å°æ»¡è¶³æ¨çè¦æ±ãç¶èï¼å¦æä½ æ³æä½ çè·è¸ªä¿¡æ¯è¾åºå°ä¸åçç®çå°ï¼ä½ å¯ä»¥å®ç°ä½ èªå·±çè·è¸ªçå¬å¨ã
è¦å»ºç«ä¸ä¸ªèªå®ä¹çè·è¸ªçå¬å¨ï¼ä½ åºè¯¥å建ä¸ä¸ªæ©å±TraceListeneræ½è±¡ç±»çç±»ãå¨TraceListenerç±»ä¸æå 个èæåæ½è±¡çæ¹æ³ãä½ è³å°åºè¯¥å®ç°WriteåWriteLineæ¹æ³ãè³å°ï¼ä½ çèªå®ä¹è·è¸ªçå¬å¨åºè¯¥çèµ·æ¥åè¿æ ·ã
publicclassCustomTraceListener:TraceListeneræ以ï¼ä½ çèªå®ä¹è·è¸ªçå¬å¨ç±»å¿ é¡»æä¸ä¸ªåæ°æé å¨åWriteåWriteLineæ¹æ³ã
ä½ è¿éè¦ä¸ä¸ªILoggerå®ä¾æ¥ä»£è¡¨è®°å½å¨ï¼ä¸ä¸ªè®°å½å¨å·¥åæ¥å建记å½å¨ï¼ä»¥åä¸ä¸ªStringBuilderæ¥åå¨è·è¸ªæ¶æ¯ï¼ç¶ååå°å®ä»¬åéå°æ¥å¿ç®æ ã
privatereadonlyILoggerFactory_loggerFactory;ä½ å¯ä»¥å©ç¨ä¾èµæ³¨å ¥çä¼å¿ï¼å¨æé å½æ°ä¸æ³¨å ¥ILoggerFactoryçä¸ä¸ªå®ä¾ï¼ç¶å使ç¨è¯¥å®ä¾æ¥å建ILoggerçä¸ä¸ªå®ä¾ã
publicCustomTraceListener(ILoggerFactoryloggerFactory)è¿éæ¯WriteåWriteLineæ¹æ³çä¸ä¸ªæå°å®ç°ã
publicoverridevoidWrite(string?message,string?category)ASP.NET Core 6ä¸å®æ´çèªå®ä¹è·è¸ªçå¬å¨ç¤ºä¾ä¸é¢æ¯æ们对èªå®ä¹è·è¸ªçå¬å¨çæå°å®ç°çå®æ´æºä»£ç ï¼ä¾æ¨åèã
usingSystem.Collections.Concurrent;å¨Program.csæ件ä¸æ³¨åèªå®ä¹è·è¸ªçå¬å¨è¦ä½¿ç¨èªå®ä¹è·è¸ªçå¬å¨ï¼ä½ åºè¯¥ä½¿ç¨ä»¥ä¸ä»£ç å¨çå¬å¨éåä¸æ³¨åå®ã
varloggerFactory=app.Services.GetRequiredService<ILoggerFactory>();å 为æ们çèªå®ä¹è·è¸ªçå¬å¨å·²ç»è¢«æ·»å å°çå¬å¨éåä¸ï¼å®å°æè·ææç±è¿è¡æ¶äº§ççè·è¸ªæ¶æ¯ï¼å¹¶å°è¾åºåéå°æ们çè®°å½å¨ãå®è¿å°åéæ们å¨åºç¨ç¨åºä¸æç¡®åéçä»»ä½è·è¸ªæ¶æ¯ï¼å°±åæ们å¨åé¢çmyFirstListenerä¾åä¸åçé£æ ·ï¼ã
å æ¤ï¼ä»»ä½æ·»å å°çå¬å¨éåççå¬å¨é½å¯ä»¥æè·ç±è¿è¡æ¶äº§ççè·è¸ªä¿¡æ¯ï¼ä»¥åå¨åºç¨ç¨åºä¸æç¡®åéçä»»ä½è·è¸ªä¿¡æ¯ãç¶èï¼å¦æä¸ä¸ªè·è¸ªçå¬å¨æ²¡æ被添å å°éåä¸ï¼å®åªè½åéåºç¨ç¨åºä¸æç¡®åéçè·è¸ªæ¶æ¯ãå®ä¸ä¼æè·ä»»ä½ç±è¿è¡æ¶äº§ççè·è¸ªæ¶æ¯ã
å½ä½¿ç¨èªå®ä¹è·è¸ªçå¬å¨æ¶ï¼ä½ å¿ é¡»è®°ä½å ³éæå·æ°è·è¸ªçå¬å¨ï¼ä»¥ç¡®ä¿è¾åºç¼å²åºè¢«æ¸ 空ãä½ å¯ä»¥å©ç¨StringBuilderCacheç±»æ¥ä¼åä½ ä½¿ç¨StringBuilderç代ç ï¼å¨CustomTraceListenerç±»ï¼ã
Android Activity Deeplink启动来源获取源码分析
Deeplink在业务模块中作为外部应用的入口提供,不同跳转类型可能会导致应用提供不一致的服务,通常通过反射调用Activity中的mReferrer字段获取跳转来源的包名。然而,mReferrer存在被伪造的风险,可能导致业务逻辑出错或经济损失。因此,我们需要深入分析mReferrer的来源,并寻找更为安全的获取方法。
为了深入了解mReferrer的来源,我们首先使用搜索功能在Activity类中查找mReferrer,发现其在Attach方法中进行赋值。进一步通过断点调试跟踪调用栈,发现Attach方法是由ActivityThread.performLaunchActivity调用的。而performLaunchActivity在调用Attach时,传入的referrer参数实际上是一个ActivityClientRecord对象的referrer属性。深入分析后,发现referrer是在ActivityClientRecord的构造函数中被赋值的。通过进一步的调试发现,ActivityClientRecord的实例化来自于LaunchActivityItem的mReferrer属性。接着,我们分析了mReferrer的来源,发现它最终是由ActivityStarter的setCallingPackage方法注入的。而这个setCallingPackage方法的调用者是ActivityTaskManagerService的startActivity方法,进一步追踪调用链路,我们发现其源头是在App进程中的ActivityTaskManager.getService()方法调用。
在分析了远程服务Binder调用的过程后,我们发现获取IActivityTaskManager.Stub的方法是ActivityTaskManager.getService()。这使得我们能够追踪到startActivity方法的调用,进而找到发起Deeplink的应用调用的具体位置。通过这个过程,我们确定了mReferrer实际上是通过Activity的getBasePackageName()方法获取的。
为了防止包名被伪造,我们注意到ActivityRecord中还包含PID和Uid。通过使用Uid结合包管理器的方法来获取对应的包名,可以避免包名被伪造。通过验证Uid的来源,我们发现Uid实际上是通过Binder.getCallingUid方法获取的,且Binder进程是无法被应用层干涉的,因此Uid是相对安全的。接下来,我们可以通过Uid来置换包名,进一步提高安全性。
总结,mReferrer容易被伪造,应谨慎使用。通过使用Uid来获取包名,可以提供一种更为安全的获取方式。此过程涉及对源代码的深入分析和调试,作者Chen Long为vivo互联网客户端团队成员。
Messier - 简单易用的Objective-C方法跟踪工具
欢迎来到Objective-C开发者们的福音——Messier,一款专为iOS应用性能跟踪量身打造的利器。它巧妙地填补了Time Profiler在展示时序信息方面的空白,针对iOS开发者对性能优化的迫切需求而诞生。尽管AppleTrace在年已崭露头角,但其易用性并未完全满足大家的期待。为了简化工作流程,提高效率,作者精心研发了Messier,一套包括Tweak越狱插件、动态messier.framework库以及桌面端追踪软件的完整解决方案。 在越狱设备上,Messier如同一位贴心的向导,只需简单几步就能启动追踪:首先,将messier.framework添加到你的Xcode项目中,点击Link Binary With Libraries。接着,在Project Scheme的Environment Variables中设置关键参数,如MessierEnableOnAppBoot、MessierInlineHook和MessierMainThreadMethodsOnly。连接设备后,通过USB接口启动追踪,任务完成后,点击Fetch trace.json按钮,获取宝贵的性能数据。 对于非越狱设备,你可以在源码或MonkeyDev环境中进行配置,同样能享受到Messier的追踪服务。无论你的设备版本是iOS及以上,Messier都能无缝适配。遇到任何问题,我们鼓励你积极参与讨论,分享你的体验和见解,官方群组就在https://messier.app/group等你。 Messier并非孤立之作,它建立在AppleTrace开源框架的基础上,并吸收了其他优秀项目的精华。每一滴改进都凝聚了开发者们的智慧和汗水。作为一款从零开始,不断优化易用性的软件,它值得你去探索和发现。访问我们的官方网站https://messier.app/,了解更多关于Messier的详细信息和下载链接,让性能追踪变得简单而高效。