1.vså¦ä½attachè¿è¡è¿å¿«çç¨åº
2.ContentProvider 源码深入解析
3.gdb命令中attach使用
vså¦ä½attachè¿è¡è¿å¿«çç¨åº
å æä½ çå¾ è°è¯çè¿ç¨å¼å¯èµ·æ¥ï¼ç¶åå¨VSä¸ä»TOOLèåä¸éä¸attach to process,源用源Tansportéä¸default表示åæ¬æºä¸çè¿ç¨ç»å®ï¼avaliable processååºäºæ¬å°æºå¨ä¸ç°å¨è¿è¡çè¿ç¨ï¼éæ©ä½ è¦è°è¯çè¿ç¨ï¼ç¶åç¹å»attachå°±å®æäºç»å®ï¼æ¥ä¸æ¥å°±å¯ä»¥å¼å§è°è¯äºã
å¦å¤ï¼attach to processä¹å¯ä»¥ç¨äºè¿ç¨è°è¯ï¼åªè¦æ´æ¹Tansportçé项就å¯ä»¥äºï¼é常æ¹ä¾¿ã
VSè¿æä¸ä¸ª éå å°è¿ç¨(Attach)çåè½,使ç¨è¿ä¸ªå¯ä»¥å¯¹åä¸ä¸ªç¨åºåæ¶å¤å¼è°è¯äº.
åæ¶è°åä¸ç¨åºåå¼çæ¹æ³(è¿åªæ¯å ¶ä¸ä¸ç§):
1) éè°è¯è¿è¡ç¬¬ä¸ä¸ªç¨åº,å¨VSä¸æCtrl + F5ææ¾å°çæçexeè¿è¡.
2) è°è¯è¿è¡ç¬¬äºä¸ªç¨åº,å¨VSä¸æF5è¿è¡è°è¯è¿è¡.
3) å°ç¬¬ä¸ä¸ªç¨åºå å ¥è°è¯:å¨VSä¸ç¹å» è°è¯(debug) -> éå å°è¿ç¨(Attach).
æå¼éå å°è¿ç¨é¢æ¿,ä»é¢æ¿çè¿ç¨å表ä¸éæ©ç¬¬ä¸ä¸ªéè°è¯è¿è¡çç¨åº.ç¡®å®å³å¯
ContentProvider 源码深入解析
ContentProvider作为Android系统中核心组件之一,用于实现应用间数据共享。码使码其工作流程始于ActivityManagerService启动新进程,源用源此过程由startProcessLocked方法调用Process的码使码start方法实现。ActivityThread的源用源main方法作为整个流程的起点,创建ActivityThread实例后,码使码alsa源码通过attach方法进行一系列数据操作,源用源开启主线程Looper循环。码使码
attach方法内部首先调用ActivityManagerService的源用源attachApplication方法,经过attachApplicationLocked和ApplicationThread的码使码bindApplication方法,实现进程间的源用源调用。接着,码使码通过handler发送消息给ActivityThread的源用源handleBindApplication方法,从而创建ContextImpl与Instrumentation对象。码使码
整个启动过程中,源用源php排班系统源码installContentProviders方法起到关键作用,它遍历ProviderInfo列表,通过installProvider进行ContentProvider启动操作,并将启动的ContentProvider发布到AMS中。借助ClassLoader加载ContentProvider,完成对象创建。最终调用localProvider.attachInfo(c,斗牛房卡源码 info);方法,实现ContentProvider的onCreate操作,至此,ContentProvider完成启动过程,为其他应用提供访问途径。
随着ContentProvider的启动,ActivityManager能够访问并利用其提供的接口,实现应用间的微场景制作源码数据共享。这一机制简化了跨应用数据访问的复杂性,为Android系统的整体架构提供了高效的数据流通渠道。
gdb命令中attach使用
我们先看看我们的测试程序:
/* in eg1.c */
int wib(int no1, int no2)
{
int result, diff;
diff = no1 - no2;
result = no1 / diff;
return result;
}
int main()
{
pid_t pid;
pid = fork();
if (pid <0) {
printf("fork err\n");
exit(-1);
} else if (pid == 0) {
/* in child process */
sleep(); ------------------ (!)
int value = ;
int div = 6;
int total = 0;
int i = 0;
int result = 0;
for (i = 0; i < ; i++) {
result = wib(value, div);
total += result;
div++
value--;
}
printf("%d wibed by %d equals %d\n" value, div, total);
exit(0);
} else {
/* in parent process */
sleep(4);
wait(-1);
exit(0);
}
}
该测试程序中子进程运行过程中会在wib函数中出现一个‘除0‘异常。现在我们就要调试该子进程。
[调试原理]
不知道大家发现没有,在(!)处在我们的测试程序在父进程fork后,子进程调用sleep睡了秒。usdt投资盘源码这就是关键,这个sleep本来是不该存在于子进程代码中的,而是而了使用GDB调试后加入的,它是我们调试的一个关键点。为什么要让子进程刚刚运行就开始sleep呢?因为我们要在子进程睡眠期间,利用 shell命令获取其process id,然后再利用gdb调试外部进程的方法attach到该process id上,调试该进程。
[调试过程]
我觉上面的调试原理的思路已经很清晰了,剩下的就是如何操作的问题了。我们来实践一次吧!
我所使用的环境是Solaris OS 9.0/GCC 3.2/GDB 6.1。
GDB 调试程序的前提条件就是你编译程序时必须加入调试符号信息,即使用‘-g‘编译选项。首先编译我们的源程序‘gcc -g -o eg1 eg1.c‘。编译好之后,我们就有了我们的调试目标eg1。由于我们在调试过程中需要多个工具配合,所以你最好多打开几个终端窗口,另外一点需要注意的是最好在eg1的working directory下执行gdb程序,否则gdb回提示‘No symbol table is loaded‘。你还得手工load symbol table。好了,下面我们就‘按部就班‘的开始调试我们的eg1。
执行eg1:
eg1 & --- 让eg1后台运行吧。
查找进程id:
ps -fu YOUR_USER_NAME
运行gdb:
gdb
(gdb)attach xxxxx--- xxxxx为利用ps命令获得的子进程process id
(gdb)stop--- 这点很重要,你需要先暂停那个子进程,然后设置一些断点和一些Watch
(gdb)break-- 在result = wib(value, div);这行设置一个断点,可以使用list命令察看源代码
Breakpoint 1 at 0x: file eg1.c, line .
(gdb)continue
Continuing.
Breakpoint 1, main () at eg1.c:
result = wib(value, div);
(gdb)step
wib (no1=, no2=6) at eg1.c:
diff = no1 - no2;
(gdb)continue
Continuing.
Breakpoint 1, main () at eg1.c:
result = wib(value, div);
(gdb)step
wib (no1=9, no2=7) at eg1.c:
diff = no1 - no2;
(gdb)continue
Continuing.
Breakpoint 1, main () at eg1.c:
result = wib(value, div);
(gdb)step
wib (no1=8, no2=8) at eg1.c:
diff = no1 - no2;
(gdb)next
result = no1 / diff;
(gdb)print diff
$6 = 0 ------- 除数为0,我们找到罪魁祸首了。
(gdb)next
Program received signal SIGFPE, Arithmetic exception.
0xffd in .div () from /usr/lib/libc.so.1
至此,我们调试完毕。
gdb命令中attach使用
2024-11-25 01:12287人浏览
2024-11-25 01:041812人浏览
2024-11-25 00:522897人浏览
2024-11-25 00:152952人浏览
2024-11-24 23:491872人浏览
2024-11-24 23:26790人浏览
1.北京软件测试培训机构哪家好?2.微信答题小程序排位好友pk知识问答头脑王者源码答答星球带后台教育app3.web培训一般多少钱?4.少儿编程是什么?5.玉溪师范学院院系设置6.国内最好的java培
中国消费者报报道记者刘铭)当下正值高校毕业季,大量应届大学毕业生上网求职。一些培训机构通过在知名网络短视频平台投放引流广告或内容进行直播授课推广,打着“包教包会,不会全额退款”“包就业”“七天快速回本
中国消费者报南昌讯记者朱海)遇到特种设备突发意外情况怎么办?企业特种设备安全主体责任如何落实?6月26日,在江西省市场监管局主办的2023年江西省首届特种设备安全宣传周启动仪式上,南昌华侨城文化旅游管