在一个生产站点上,我们的应用程序(*)反复崩溃,但不可重现.分析崩溃转储清楚地表明它是一个堆损坏:崩溃位于不同的位置,但始终访问kernel32!HeapFree
/ 内部的违规ntdll!RtlpLowFragHeapFree
.Win Dbg !analyze -v
还报告堆损坏.
到目前为止我们尝试的是使用GFlags选项Page Heap运行应用程序.问题是页面堆的内存开销使应用程序不再运行(达到32位进程的虚拟内存限制).
所以,我们不能使用Page Heap.添加哪些其他标志对我们要么有用
HeapFree
?我们正在尝试标志:
希望下一个崩溃转储包含更多关于出错的信息.
我考虑过这些标志,但暂时将它们排除在外:
我(也)遇到的一个问题是,我不确定这些标志在发生内存损坏时如何起作用.当某些内容写入保护页面时,页面堆显然会产生访问冲突,但其他标志如何运行?
我是否必须使用Application Verifier运行应用程序以获取其他标志以帮助您?或者在检查代码检测到某些内容时会引发异常?
这些标志的哪种组合最有意义,以便应用程序仍可以在生产中以良好的性能和内存消耗运行?
(*):它是工业自动化中的32位Windows桌面应用程序.在这种情况下运行在Win7 64bit上(它在许多其他站点上运行得很好).
在"JavaScript:The Good Parts"一书中,它解释了string.match(regexp)
如下方法:
match方法匹配字符串和正则表达式.它是如何做到这取决于g标志.如果没有g标志,那么调用string .match(regexp)的结果与调用regexp .exec(string)相同.但是,如果正则表达式具有g标志,则它会生成所有匹配的数组,但不包括捕获组:
然后这本书提供了代码示例:
var text = '<html><body bgcolor=linen><p>This is <b>bold<\/b>!<\/p><\/body><\/html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a, i;
a = text.match(tags);
for (i = 0; i < a.length; i += 1) {
document.writeln(('// [' + i + '] ' + a[i]).entityify());
}
// The result is
// [0] <html>
// [1] <body bgcolor=linen>
// [2] <p>
// [3] This is
// [4] <b>
// [5] bold
// [6] </b>
// [7] !
// [8] </p> …
Run Code Online (Sandbox Code Playgroud) 我正在Mac OS Mojave和Xcode 10上测试React Native 0.56.0-rc.2.
运行:
react-native init TestProject --version="0.56.0-rc.2"
cd TestProject
npm run start
react-native run-ios
Run Code Online (Sandbox Code Playgroud)
这产生了一些长期错误.
输入Xcode让我失败config.h
了glog,我发现可以手动构建:
cd ./node_modules/react-native/third-party/glog-0.3.4
./configure && make && make install
Run Code Online (Sandbox Code Playgroud)
通过那个阶段,但让我接下来的另一个问题
(...)/node_modules/react-native/third-party/glog-0.3.4/src/glog/logging.h:85:10:
'gflags/gflags.h' file not found
Run Code Online (Sandbox Code Playgroud)
我无法在Google或Stack Overflow上找到任何与RN相关的内容,只能参考其他软件包以及在基于Debian的系统上安装这些软件包的说明.
这是一个已知的问题?
我试图让oauth在Google App Engine(GAE)上工作,但是我无法导入OAuth2Decorator
,因为它试图导入gflags
并失败.
在命令行中,我已经运行help('modules')
并且列出了gflags,并且我已经运行了import os
+ import gflags
+ print os.path.dirname(gflags.__file__)
并且已经收到了/Library/Python/2.7/site-packages/python_gflags-2.0-py2.7.egg
.
在GAE Dev Console我跑了:
import sys
import os
try:
import webapp2
import httplib2
from oauth2client.appengine import OAuth2Decorator
except ImportError, e:
print("The import failed!")
print(e)
Run Code Online (Sandbox Code Playgroud)
并收到:
The import failed!
No module named gflags
Run Code Online (Sandbox Code Playgroud)
gflags
是由导入的from oauth2client.appengine import OAuth2Decorator
,但gflags
每次运行代码时GAE都无法导入.
我不确定它有什么不同,但我正在运行Mac OS 10.7.5和python 2.7.1
google-app-engine gflags oauth-2.0 python-2.7 google-api-python-client
我正在尝试删除标志"使用DLL启用堆标记"时出现错误,调试工具GFlags用于所谓的"图像":我正在调试的应用程序.
我得到" 无法保存注册表错误5 ".但是对于其他"启用堆..."标志没有问题,它们可以打开和关闭.我尝试以管理员身份启动该实用程序,但这不会改变任何内容.
所以我试图弄清楚应该手动更改哪些注册表设置以使事情恢复正常,但是我似乎没有找到关于Windows全局标志的正确注册表项.
或者我可以删除与我的应用程序相关的任何全局标志.
任何的想法 ?
我试图找到FLG_HEAP_PAGE_ALLOCS在注册表中,这是更普遍的标志的符号名称"启用页堆"为说,这里在MSDN.但没有成功.
我正在尝试构建包含的库,'gflags/gflags.h'
但无法找到它。
我用自制软件安装了 gflags 和 glog。
CMake 输出说:
-- Found installed version of gflags: /usr/local/lib/cmake/gflags
-- Detected gflags version: 2.2.2
-- Found Gflags: /usr/local/include
-- Found Glog: /usr/local/include
Run Code Online (Sandbox Code Playgroud)
运行时"cmake"
一切正常,没有错误。但是当我运行时"make install"
它无法构建并且它说"fatal error: 'gflags/gflags.h' file not found"
如何在 OsX 中构建需要 gflags 的库?
如何使用GFlags设置并从中受益?通过DLL启用堆标记?
我知道如何激活进程的设置,但我没有!heap -t
在WinDbg 的输出中找到有用的信息.我期待这样的输出:
0:000> !heap -t
Index Address Allocated by
1: 005c0000 MyDll.dll
2: 006b0000 AnotherDll.dll
Run Code Online (Sandbox Code Playgroud)
这样我就可以识别哪个堆由哪个DLL创建,然后识别内存泄漏的来源.
这是对"DLL堆标记"一词的误解,还是需要更多命令来获得所需的结果?
我的研究到目前为止:
.hh !heap
但它的细节也没有详细说明.标签仅用于!heap -b
当我在Windows 7上运行gflags时,它应该提供UI,但事实并非如此.我看到一个简短的黑色命令窗口然后退出并且gflags UI永远不会出现.它可能在命令提示符下工作但我真的想通过UI使用它.
我目前正在尝试调试我的一个应用程序中的内存泄漏(是的,那个废话再次......),并试图设置gflags
设置,但对话框将无法打开.我安装了Windows 10 SDK(我在Windows 7 x64上),但它说它在Win7上也适用于描述,那为什么我根本不能使用它?
如果我gflags
从命令行开始,什么都没发生,没有错误,没有反馈,没有.
有人知道我的系统可能会发生什么吗?
我在测试中使用了gflags来定义自定义标志.如何通过bazel test
命令运行测试时将这样的标志传递给我的测试?
例如:我可以使用以下命令多次运行测试:
bazel test //xyz:my_test --runs_per_test 10
Run Code Online (Sandbox Code Playgroud)
在同一个命令中我想传递一个标志,my_test
比如说--use_xxx
,我该怎么做?
gflags ×10
windbg ×3
glog ×2
windows ×2
bazel ×1
c++ ×1
cmake ×1
debugging ×1
javascript ×1
macos ×1
match ×1
oauth-2.0 ×1
python-2.7 ×1
react-native ×1
regex ×1
registry ×1
string ×1
sysinternals ×1
visual-c++ ×1
windows-7 ×1