我有一个URL.有可能以某种方式获得控制器和动作名称以及路由值吗?(通常由.NET MVC框架基于global.asax中的定义生成)
所以我想让读D读取这个内存位置并做一些工作.有什么想法吗?是编写调试器扩展的唯一方法 - 如果是这样,任何建议?
我考虑过执行内存转储到文件(仍然不知道如何,AFAIK我只能在窗口中查看内存)并让D处理文件,但是有更好的方法吗?
我在Delphi 2007中编写了应用程序,有时会挂起(甚至不是每周都有应用程序全天候运行).看起来主线程卡住了.有哪些方法可以找出导致此问题的原因?
应用程序是用Delphi 2007编写的,它使用RemObjects,DBExpress和Firebird,使用COM进行OPC通信.
我正在创建一个Twitter应用程序,每次用户更新页面时,它都会重新加载来自Twitter的最新消息并将它们保存到本地数据库,除非它们之前已经创建过.这在开发环境(数据库:sqlite3)中运行良好,但在生产环境(mysql)中,它总是会再次创建消息,即使它们已经创建过.
twitter_id检查消息创建,每条消息都有:
msg = Message.find_by_twitter_id(message_hash['id'].to_i)
if msg.nil?
# creates new message from message_hash (and possibly new user too)
end
msg.save
Run Code Online (Sandbox Code Playgroud)
显然,在生产环境中,由于某种原因,它无法通过twitter id找到消息(当我查看数据库时,它已经正确保存了所有属性).
通过这个长篇介绍,我想我的主要问题是如何调试这个?(除非你已经对主要问题有了答案,当然:)当我查看production.log时,它只显示如下内容:
Processing MainPageController#feeds (for 91.154.7.200 at 2010-01-16 14:35:36) [GET]
Rendering template within layouts/application
Rendering main_page/feeds
Completed in 9774ms (View: 164, DB: 874) | 200 OK [http://www.tweets.vidious.net/]
Run Code Online (Sandbox Code Playgroud)
...但不是数据库请求,logger.debug文本或任何可以帮助我找到问题的内容.
如果我在Visual Studio 2008中单击"调试所有测试",则需要很长时间才能启动(而"运行所有测试"会立即启动).据我所知,这是因为它正在从微软下载符号.为什么是这样?无论如何,我可以阻止它或让它开始更快?
我正在使用第三方库编译我的应用程序,似乎有一些奇怪的行为表明堆栈溢出问题(这只是猜测).
但是,当我崩溃应用程序的行运行正常后,我添加一个print语句.如果我删除了print语句(一个简单的cout <<"print something"<< endl;语句),应用程序崩溃了
0x00007f48f2027276 in free () from /lib64/libc.so.6
Run Code Online (Sandbox Code Playgroud)
我尝试添加以下char数组来代替print语句,这也停止了崩溃,然后我尝试打印char数组的内容:
char ben[8000] = {0};
memset(&ben, 0, sizeof (ben));
for (int y = 0; y < 8000; ++y)
{
if (ben[y] != 0)
PRINT ("CHAR[%d]=%d", y, ben[y]);
}
Run Code Online (Sandbox Code Playgroud)
看看数组中的任何内容是否被破坏,但这种方法不起作用.所以我想知道是否有更好的方法来检测这是否是堆栈溢出问题?
我用-fstack-protector-all(lib和我的代码)重新编译了应用程序,这并没有发现任何东西.我也试过valgrind而且它没有给我任何看起来可疑的东西.
它似乎崩溃,因为我试图释放一个无效的指针,但我不知道为什么指针是无效的,因为它释放了一个局部变量(即当它超出范围时).指针因某种原因而被破坏,但这有点像在大海捞针.有没有什么好的技术可以尝试和融合这类问题?非常感谢!
我有一些动态的sql语句,它在某些条件下发生轰炸,所以我试图调试它.它像这样构建:
declare @sql varchar(4000);
...
select @sql = '<part1>';
...
select @sql = @sql + '<part2>';
...
select @sql = @sql + '<part3>';
...
begin
execute(@sql);
select @ec__errno = @@error
if @ec__errno != 0
begin
if @@trancount != 0
begin
rollback;
end
return @ec__errno;
end;
...
Run Code Online (Sandbox Code Playgroud)
正如我所说,它在一个循环的特定迭代中爆炸(不要问我为什么这样实现,我只是修复了一个错误)并且我很难在监视窗口中显示字符串的内容.我想我只得到前255个字符.注意substring(@sql, 0, 200)结果'substring(@sql,0,200)' could not be evaluated.请帮忙.我希望能看到从0到199,从200到399的子串,依此类推,然后将这个东西拼凑起来,最后调试它.
我很感激你的指点.谢谢!
我正在尝试优化代码的性能,但我一般不熟悉xcode的调试器或调试器.是否可以跟踪在运行时进行的调用的执行时间和频率?
想象一段事件链,在几分之一秒内有一些递归调用.跟踪CPU花费大部分时间的最佳方法是什么?
非常感谢.
编辑:也许最好问一下,如何使用xcode调试工具进行堆栈跟踪?
我在Visual Studio 2008中调试代码时得到了这个对话框.
(您的步入请求导致自动步进)
alt text http://www.freeimagehosting.net/uploads/69a123b9e7.jpg
有任何想法吗?
在XCode中,似乎没有一种明显的方法可以做到这一点.Visual Studio的调试器提供了一个键盘快捷键,它在代码窗口中选择的行上设置临时断点,运行调试器到该点,然后删除断点.在XCode中,您似乎必须手动设置和删除断点才能完成相同的操作.
有更简单的方法吗?
debugging ×10
c++ ×2
xcode ×2
asp.net-mvc ×1
delphi ×1
dynamic-sql ×1
gdb ×1
hang ×1
iphone ×1
mysql ×1
optimization ×1
overflow ×1
performance ×1
routes ×1
sqlite ×1
twitter ×1
unit-testing ×1